2011-10-18 9 views
0

OK LINQ to DataSetsを使用するときにブール型キャストの問題を解決するように見えますが、新しい結果セットが新しい問題を引き起こすようです。だから、LINQ使用して、オブジェクトにブール型プロパティを移入された次の行を見てみましょう:LINQ to DataSetsを使用するときにブール型をキャストするときにエラーが発生する

.IsActive = If(fd.IsNull("IsActive"), False, fd.Field(Of Boolean)("IsActive")) 

を私も持っていた次といくつかの成功:

.IsActive = If((fd.Field(Of Integer?)("IsActive").HasValue), fd.Field(Of Integer)("IsActive"), False) 

この時点でもないアプローチ働いた。データベース内の "IsActive"型は 'ビット'であり、DataSetでは返されるすべてのレコードの値が '0'または '1'です。いずれにしても、次のエラーが表示されます。

"指定されたキャストは無効です。数値からキャストする場合、値は無限大未満の数値である必要があります。

ここで間違っていることを理解したいと思います。誰も私がどのようにキャスティングする必要があります説明することはできますか?ありがとう!

+1

なぜデータテーブル内のIsActive列がブール値ではないのですか?どのようにデータテーブルを埋めるのですか? Visual Studioで生成された型付きデータセットは、通常、データベースのビットフィールドからブール値のデータ列を作成します。 –

+0

実際にSQL Server(2008)には「ブール型」はありません。これらの型の値に「ビット」フィールドを使用します。しかし、あなたのコメントにより、私はデータベースを2回見て、以下の解決策を決定しました。私はあなたのコメントをアップしました。 – atconway

+0

私は知っている、私はデータセットを参照していた。だからまだ私には不思議に思っています... –

答えて

0

まあ、元の問題に対する解決策(より多くの回避策のようなもの)を見つけた後、データベースを振り返ってみると問題の発生を発見しました。回避策は、値を文字列にキャストし、ブール値に変換することでした。本当に奇妙な、なぜ私は「ビット」フィールドにこれをしなければならなかったが、それは働いた:まだ右ていないようでした

.IsActive = If(fd.IsNull("IsActive"), False, CBool(fd.Field(Of String)("IsActive").ToString())) 

OK、私の元のコードを、オリジナルのポストでべきで、ビットのため作業を行います/ブール型。 2年前にデータベースに戻ったあと、私は自分のおっとりを見つけました。何らかの理由で私はその列を偶然「char(1)」フィールドにしました。私が文字列にキャストしなければならなかったのも不思議ではない。列を「ビット」にした後、元のコードが機能しました。

関連する問題