2016-06-20 9 views
0

Wenn meine Abfrage in meiner VB-Anwendung ausführt, erhalte ich folgende Fehlermeldung:Oracle SQL-Select-Abfrage funktioniert nicht in VB.NET funktioniert in SQL +

ORA-00942: table or view does not exist 

Alle Tabellennamen in meiner Abfrage richtig geschrieben sind, und tatsächlich existieren.

Wenn ich die Abfrage aus meiner VB.net-Anwendung ablegen und dann die Abfrage manuell in Oracle SQL Plus ausführen, wird es problemlos ausgeführt.

In beiden Fällen bin ich mit den gleichen Anmeldeinformationen angemeldet und habe die gleiche Datenbank ausgewählt. Für meine Verbindung innerhalb von Visual Basic verwende ich OleDb.

Von In meiner Visual Basic-Anwendung lief ich auch eine Abfrage alle Tabellen-Dump, die der Benutzer Zugriff

select table_name from all_tables 

Und die Tabellennamen hat, die ich Abfragen bin Show bis zu verwenden.

Irgendeine Idee, was das verursachen würde?

SELECT 
    RSS.STEP_STATUS_DATE,           
    RSS.VALUE_RECORDED          
FROM  
    ITR,               
    REPORT R,              
    INSTRUCTION I,             
    INSTRUCTION_STEP INS,           
    REPORT_STEP RS,             
    REPORT_STEP_STATUS RSS         
WHERE  
    ITR.ITR_NO = '1' AND           
    I.INSTRUCTION_ID = '12345' AND         
    INS.STEP_NO = '2' AND           
    R.INSTRUCTION_ID = I.INSTRUCTION_ID AND       
    RS.REPORT_ID = R.REPORT_ID AND         
    RS.INSTRUCTION_STEP_ID = INS.INSTRUCTION_STEP_ID AND   
    RSS.REPORT_STEP_ID = RS.REPORT_STEP_ID AND      
    RSS.MEASUREMENT_NAME = 'ESN' 

My Visual Basic-Code ist wie folgt:

strQuery = "SELECT RSS.STEP_STATUS_DATE,         " + 
      "   RSS.VALUE_RECORDED         " + 
      "FROM  ITR,             " + 
      "   REPORT R,            " + 
      "   INSTRUCTION I,          " + 
      "   INSTRUCTION_STEP INS,         " + 
      "   REPORT_STEP RS,          " + 
      "   REPORT_STEP_STATUS RSS        " + 
      "WHERE ITR.ITR_NO = '%01' AND        " + 
      "   I.INSTRUCTION_ID = '%02' AND       " + 
      "   INS.STEP_NO = '%03' AND        " + 
      "   R.INSTRUCTION_ID = I.INSTRUCTION_ID AND    " + 
      "   RS.REPORT_ID = R.REPORT_ID AND      " + 
      "   RS.INSTRUCTION_STEP_ID = INS.INSTRUCTION_STEP_ID AND " + 
      "   RSS.REPORT_STEP_ID = RS.REPORT_STEP_ID AND   " + 
      "   RSS.MEASUREMENT_NAME = '%04'" 
+1

Nur zum Spaß, können Sie die Abfrage ändern, um den Tabellennamen in Großbuchstaben zu haben? (Nicht unbedingt zitiert - ich vermute, der Treiber fügt Zitate hinzu und macht sie ungültig) –

+0

@AlexPoole Ich habe versucht, alles in Großbuchstaben umzuwandeln, und das Problem bleibt immer noch –

+0

@BelginFish - könnten Sie die Abfrage posten? – vercelli

Antwort

0

Ich bin an diesem Abschnitt suchen (und andere wie es):

RSS.MEASUREMENT_NAME = '%04' 

Ich erwarte, dass Sie dies tun soll :

RSS.MEASUREMENT_NAME LIKE '%04' 

Während ich hier bin, fast niemand verwenden s die "A, B" Join-Syntax mehr. Es ist extrem veraltet und kann zu Fehlern führen, wenn Join-Bedingungen auf die falschen Tabellen angewendet werden, so dass die Abfrage keine Ergebnisse zurückgibt ... mit anderen Worten, es könnte sogar das Problem verursachen, das Sie gerade haben.

+0

Ich habe eine Funktion, um% 01,% 02, etc ... durch ein Array von gelieferten Werten zu ersetzen, deshalb ist das da. Wenn dies die Ursache des Problems war, würde es nicht auch den Fehler auslösen, wenn die Abfrage von Oracle SQL + ausgeführt wird? –

+0

Das ist noch schlimmer. Dies wird dich für SQL-Injektionsangriffe furchtbar anfällig machen. –

+0

Sie können nicht sagen, dass es schrecklich schlechter ist, ohne meine Ersatzfunktion zuerst zu sehen –