8

私は .NET の厳密に型指定されたデータセットを使用しており、null 許容 int 列 (および null 許容 DateTime 列) を持つテーブルがあります。

どうやら、データセット デザイナーにバグがあり、これらのデータ型で null 許容列を使用できないようです。デザイナーは、null 値の既定の動作として「例外のスロー」のみを許可します。残念ながら、データベースで null 許容データ型を使用する場合、null 値は正当な値ですが、データ行からこの値を取得しようとすると例外がスローされます。

この問題に関するいくつかのニュースグループの投稿を見てきましたが、この問題に対する適切な回避策はまだ見当たりません。

他の人がこの問題にどのように対処したかを知りたいです。

ありがとう。

4

3 に答える 3

8

ASP.NET フォーラムのこの投稿は、次の質問の助けになると思います: 厳密に型指定されたDataSet/Nullable 列の問題

このようなプロパティを null に設定する唯一の方法は、データセット ジェネレーターも作成するヘルパー メソッドを使用することです。メソッドは列名にちなんで名付けられているため、この場合、データ行オブジェクトに IsApprovingUserNull() および SetApprovingUserNull() というメソッドが必要です。

于 2009-06-01T07:45:48.383 に答える
3

DBNull は基本的に、.NET 2.0 より前に、null 非許容値型を処理するために導入されました。ADO.NET の設計上、より直接的なアプローチを選択しない限り、DBNull を回避する方法はありません。DBNull は ADO.NET のコアに組み込まれているため、使い続けたい場合は、それに慣れる必要があります。

汎用の System.Data 名前空間に依存するのではなく、独自のデータ トランスポート オブジェクトを提供する場合は、(データ リーダーで結果を読み込んでいる間に) 値が null かどうかを確認できますが、厳密に型指定されたものを生成する何らかの方法が必要になります。オブジェクトとマッピングは非常に面倒な作業です。

私の知る限り、DBNull は ADO.NET の設計に組み込まれており、それを使用する場合にアプリを構築する最善の方法は、DBNull と null を結合 (正規化) することです。基本的に、DBNull をインターセプトし、値が DBNull の場合は実際の null 参照を返す独自の DbConvert クラスを提供します。これは最小限の要件ですが、それが完了するとすぐに、心配する DBNull 値が少なくなります。

于 2009-05-18T20:38:14.850 に答える
0

型付きデータセットを使用してからしばらく経ちましたが、古いコードでcodegen:nullValue属性を使用していることがわかります。少なくともVS2005(私がそのプロジェクトで使用した)ではサポートされていないと思うので、xmlエディターでxsdファイルを開いて手動で行う必要があります。

結果のxmlは次のようになります。

<xs:sequence>
    <xs:element 
        name="MyIntColumn" 
        codegen:nullValue="0" 
        type="xs:int" 
        minOccurs="0" />
    <xs:element 
        name="MyBoolColumn" 
        codegen:nullValue="false" 
        type="xs:boolean" 
        minOccurs="0" />
    <xs:element 
        name="MyDateColumn" 
        codegen:nullValue="1900-01-01" 
        type="xs:dateTime" 
        minOccurs="0" />
</xs:sequence>
于 2009-05-18T20:28:43.200 に答える