SelectCommand.Parameters

13/06/2008 - 19:54 von Hans Wagner | Report spam
Hallo,
ich habe eine Access-db und möchte eine SQL Anweisung mit Parametern
erstellen. Dies funktioniert aber irgendwie nicht. Ich erhalte keine
Fehlermeldung aber die datatable ist leer.
Kopiere ich den Inhalt der Variablen txtFzge anstelle des ? in den
SQL-String funktioniert alles.

Anbei mein Beispiel:
Dim selStr As String = "SELECT Datum, Fahrzeugtyp, Kategorie, Kilometer,
Preis, Liter, [Liter]/[Preis] AS PreisProLiter, " & _
"([Liter]/[Kilometer])*100 AS Durchschnittsverbrauch " & _
"FROM tblKategorien INNER JOIN (tblFahrzeuge INNER JOIN
tblBasisdaten ON " & _
"tblFahrzeuge.ID = tblBasisdaten.tblFahrzeuge_ID) ON
tblKategorien.ID = tblBasisdaten.tblKategorien_ID " & _
"WHERE ((Datum) Between #1/1/1967# And #12/30/2006#) " & _
"AND Fahrzeugtyp IN (?);"

da = New OleDbDataAdapter(selStr, conn)

da.SelectCommand.Parameters.Add("?", OleDbType.WChar).Value = txtFzge


' Ausführen der SQL-Abfrage (Anlegen und Füllen der Tabelle)
dt = New DataTable("tblBasisdaten")


conn.Open()
da.Fill(dt)

conn.Close()

Gibt es eine Funktion wo man den erstellen SQL-String mit Parametern
ansehen kann?

Kann mir hierzu jemand helfen.

Danke
Hans
 

Lesen sie die antworten

#1 Elmar Boye
13/06/2008 - 20:30 | Warnen spam
Hans Wagner schrieb:
Hallo,
ich habe eine Access-db und möchte eine SQL Anweisung mit Parametern
erstellen. Dies funktioniert aber irgendwie nicht. Ich erhalte keine
Fehlermeldung aber die datatable ist leer.
Kopiere ich den Inhalt der Variablen txtFzge anstelle des ? in den
SQL-String funktioniert alles.



Welchen Inhalt hat "txtFzge"?

[...}
"AND Fahrzeugtyp IN (?);"



Wird immer nur ein Typ abgefragt, so solltest Du den Ausdruck
"AND FahrzeugTyp = ?;"
verwenden.

Weil es oft versucht wird, sei darauf hingewiesen:
Was generell nicht geht, wàre mehrere Fahrzeugtypen über einen
Parameter (z. B. "abc, cde") abzufragen.
Willst Du mehrere Fahrzeugtypen angeben so mußt Du für jeden Typ
einen eigenen Parameter erstellen.

Das ginge z. B. in dem Du den Inhalt von txtFzge via String.Split
aufteilst und entsprechend "?" wie Parameter einfügst.

da = New OleDbDataAdapter(selStr, conn)

da.SelectCommand.Parameters.Add("?", OleDbType.WChar).Value = txtFzge




OleDbType.VarWChar ist hier besser - da WChar für eine Zeichenkette
mit fester Lànge steht, zudem solltest Du die max. Lànge für den
Parameter angeben (wàre die definierte Lànge von Fahrzeugtyp), z. B.

da.SelectCommand.Parameters.Add("FahrzeugTyp", OleDbType.VarWChar, 255).Value = txtFzge

Gibt es eine Funktion wo man den erstellen SQL-String mit Parametern
ansehen kann?



Nicht via .NET, da die Verarbeitung erst im (unmanaged) OleDb Treiber erfolgt.

Mehr zur Abfrageanalyse wàre JETSHOWPLAN:
http://groups.google.de/group/micro...bf6ccbb9fa

Beim ODBC Treiber (auch für Jet möglich, wenn auch nicht produktiv zu empfehlen)
kann das Tracing aktivieren.

Gruß Elmar

Ähnliche fragen