2016-07-21 10 views
1

私はAccessデータベースからデータを読み取るためにC#ExecuteReaderメソッドを使用しています。データリーダーに私にInt16値を返してAccess SQL文で整数を返すCBool​​関数

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

声明上:私は、Accessテーブルに文字列フィールドを持っているし、私のクエリで私は、コードの下に使用してブール値に変換しています。それはboolを返すことになっています

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

あたりとして、私はここで何をしないのですか?

+0

ドライバ/プロバイダの問題とは.. CLIタイプの問題を管理していますが、本当にここに十分なコードサンプルを提供していない。あなたは(あなたの接続文字列で)使用しているドライバ/プロバイダとコードスニペットの提供しますあなたは派生したDbCommand型でExecuteReaderを実行します。 –

答えて

0

私はここで何をしないのですか?

私はあなたが何かを逃しているとは思いません。 System.Data.OleDbSystem.Data.Odbc、そしてDAO.Recordsetを使用して自分自身の問題を再現しました。 CBoolは、VBA文でBooleanを返しますが、Access SQL文ではIntegerを返します。 :(

潜在
0

多分これを試してください。言及する価値

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

ことの一つは、Accessではい/いいえ(真/偽)フィールドは、SQL Server内のビットフィールドとして翻訳される(もし換算)と真/偽のため-1/0として変換されるということです。 BTW 0は常にFalseで、「非ゼロ」の数値はすべてTrueと見なされるため、9087もTrueです。

+0

助けてくださりありがとうございますが、IMOはテストされていないためコメントとして投稿されているはずです。 –

+0

私はMS Accessの即時ウィンドウでそれをテストし、それは私のために働いた。おそらく、DeepakがC#コードでテストする必要がありますか? –

+1

こんにちは、私はデイブのアイデアを既に試してみましたが、それはまだint16を返します。私がデータ・リーダーを読んでいるところのコード・ブロックは、SQLデータベース・アクセス・データベースdbの間で共通しているので、今度はフィールド・リトリーブ(IsXYZ)データ・リーダーとそれに応じてキャストすると、SQL dbはboolを返しますが、access dbはint16(-1,0)を返します。助けてくれたGord&Daveに感謝します。 – Deepak