Wieso funktioniert Parameterübergabe nicht?

23/04/2010 - 13:21 von Uwe Weih | Report spam
Hallo,

sqlString = "SELECT datei " + _
"FROM tbl_inventur " + _
"WHERE kennung = ? AND datum_inventur = ? AND datei
NOT IN (SELECT datei from tbl_inventur WHERE kennung = ? AND datum_inventur
"ORDER BY datei"

Dim cmd As New OleDbCommand(sqlString, conn)

cmd.Parameters.Add("?", OleDbType.VarChar).Value = Kennung
cmd.Parameters.Add("?", OleDbType.Date).Value = Datum_Neu
cmd.Parameters.Add("?", OleDbType.VarChar).Value = Kennung
cmd.Parameters.Add("?", OleDbType.Date).Value = Datum_Alt
Ich muss hier DATUM_NEU und DATUM_ALT drehen. Hmmm...

Kann man sich ansehen, welches SQL-Kommando Visual Basic aus String und
Parameter zusammenfügt? IMHO sehe ich das leider bei einer Access-Datenbank
nicht. Bei Oracle und SQLServer könnte man sicherlich die Kommandos am
Server sehen.

Bastele ich mir den SQL-String selbst zusammen, d.h. ich konvertiere data
nach string im Format #mm/dd/yyy hh:mm:ss# funktiniert die Abfrage wie
gewünscht.

Nach einigen rumprobieren, ist mir eben ein Gedanke gekommen:

Könnte es sein das VS zuerst die innere SQL-Abfrage abarbeitet und dafür die
ersten beiden Parameter einsetzt und dann im Anschluss die àußere
SQL-Abfrage und da dann die folgenden zwei Parameter einsetzt?

Ciao

Uwe
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
23/04/2010 - 16:11 | Warnen spam
Hallo Uwe,

"Uwe Weih" schrieb:

sqlString = "SELECT datei " + _
"FROM tbl_inventur " + _



vorab: Um Strings zusammenzusetzen, verwendet man in VB.NET & und nicht +

cmd.Parameters.Add("?", OleDbType.VarChar).Value = Kennung



Warum nicht Parameters.AddWithValue( ... )?

Ich muss hier DATUM_NEU und DATUM_ALT drehen. Hmmm...



Wenn man wüsste, wo bei dir Datum_alt und Datum_neu stehen sollten, könnte
man das vielleicht bejahen :)

Kann man sich ansehen, welches SQL-Kommando Visual Basic aus String und Parameter zusammenfügt?



Nicht, dass ich wüsste.

Könnte es sein das VS zuerst die innere SQL-Abfrage abarbeitet und dafür die ersten beiden Parameter einsetzt und dann im
Anschluss die àußere SQL-Abfrage und da dann die folgenden zwei Parameter einsetzt?



Nach ein paar kurzen Tests kann ich das Verhalten bestàtigen, allerdings bin
ich nicht sicher, ob VS oder doch die Jet Engine dafür zustàndig ist. Da Access
bei einer solchen Abfrage die Parameter auch von innen nach außen auflöst bzw.
abfragt, gehe ich mal davon aus, dass es an der Datenbankengine liegt. In dem
Fall kannst Du dagegen leider wenig bis gar nichts machen (außer bspw. SQL
Server nehmen, da kannst Du mit benannten Parametern arbeiten)

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen