2016-07-21 4 views
1

Ich verwende C# ExecuteReader Methode zum Lesen von Daten aus einer Access-Datenbank. Ich habe ein String-Feld in der Access-Tabelle und in meiner Anfrage ich es in Bool ist Umwandlung unter Code verwendet:CBool-Funktion, die Ganzzahl in Access SQL-Anweisung

IIF(IsXYZ = 'True',CBool(1=1),CBool(1=0)) AS IsXYZ 

obige Aussage zurückkehrt Int16 Wert für mich in Datenleser. Gemäß der

https://support.office.com/en-us/article/Type-Conversion-Functions-8ebb0e94-2d43-4975-bb13-87ac8d1a2202

es zurück bool angenommen hat, was soll ich hier fehlt?

+0

potenziell ein Treiber/Provider-Problem und verwaltet CLI-Typ Problem .. aber Sie haben wirklich nicht genügend Code-Beispiel hier zur Verfügung gestellt. Geben Sie den Treiber/Provider Sie verwenden (in Ihrer Verbindungszeichenfolge) und das Code-Snippet wo Sie ExecuteReader für den abgeleiteten DbCommand-Typ. –

Antwort

0

was fehlt mir hier?

Ich glaube nicht, dass Sie nichts verpassen. Ich habe Ihr Problem mit System.Data.OleDb, System.Data.Odbc und in Access selbst mit einem DAO.Recordset neu erstellt. Es scheint, dass CBool eine in einer VBA-Anweisung zurückgibt, aber es wird eine Integer in einer Access SQL-Anweisung zurückgeben. :(

0

Vielleicht versuchen Sie das.

CBool(IIf(IsXYZ = 'True',-1,0)) AS IsXYZ 

Eine Sache, erwähnenswert ist, dass ein Ja/Nein (True/False) Feld in Access als Bit-Feld in SQL Server übersetzt wird (wenn konvertiert) und wird als -1/0 für True/False konvertieren . BTW 0 ist immer False und jede "Nicht-Null" -Nummer wird als True betrachtet, also ist 9087 auch True!

+0

Vielen Dank für den Versuch zu helfen, aber IMO sollte dies als Kommentar gepostet werden, weil es nicht getestet wurde.Ich weiß, dass es nicht getestet wurde, weil es das Problem nicht löst.;) –

+0

Ich habe es im MS Access sofort Fenster getestet und es hat für mich funktioniert. Vielleicht sollte es von Deepak in seinem C# -Code getestet werden? –

+1

Hallo, ich habe Daves Idee schon ausprobiert und es gibt immer noch int16 zurück, der Codeblock, in dem ich den Datenreader lese, ist üblich zwischen SQL db ad access db, also jetzt prüfe ich den Datentyp des retruned Feldes (IsXYZ) des Datenreaders aus dem Datenleser und dann entsprechend zu werfen, wird SQL db eine bool zurückgeben, während Zugriff db wird eine int16 (-1,0) zurückgeben. Danke Gord & Dave für deine Hilfe. – Deepak