Ich lese Daten aus MS Access mit C#. Aber bekommen die OleDbException versuchen, eine solche Abfrage auszuführen:OleDbException: Datentyp stimmt nicht in Kriterienausdruck überein
SELECT * FROM Flats
WHERE Flats.VersionStamp <= [theDate] AND Flats.Flat=[theFlat]
OleDbException:
Data type mismatch in criteria expression.
Auf der anderen Seite, eine der folgenden Abfragen funktioniert:
SELECT * FROM Flats
WHERE Flats.VersionStamp <= [theDate] AND Flats.Flat=1
SELECT * FROM Flats
WHERE Flats.VersionStamp <= #1/1/2009# AND Flats.Flat=[theFlat]
Der C# -Code bleibt die ganze Zeit gleich:
DbParameter theFlat = new OleDbParameter("theFlat", 1);
DbParameter theDate = new OleDbParameter("theDate", new DateTime(2009, 1, 1));
using (DbDataReader reader = dbHelper.ExecuteReader(sqlText, theFlat, theDate))
{ }
Schließlich kann die Abfrage erfolgreich direkt in der MS Access UI ausgeführt werden.
Was ist hier falsch?
Abhängig von der zugrundeliegenden Datenbank, mit der es redet, erlaubt Ole benannte Parameter, verwendet aber nur die Namen nicht: Sie müssen sie immer noch in der Reihenfolge aufreihen. –
AFAIK, OleDb unterstützt benannte Parameter, aber nicht vollständig. Sie können den Parametern Namen geben, aber Sie müssen sie in der richtigen Reihenfolge zum Befehlsobjekt hinzufügen. –
Danke, Joel & Frederik. Ich habe die Reihenfolge der Parameter in ExecuteReader (...) geändert und es funktioniert! – alex2k8