強く型指定されたデータセットに値として DBNull を含めるにはどうすればよいですか?
-
13-09-2019 - |
質問
.NET アプリに厳密に型指定されたデータセット (MyDataSet) を作成しました。わかりやすくするために、1 つの DataTable (MyDataTable) と 1 つの列 (MyCol) があるとします。MyCol の DataType プロパティは「System.Int32」に設定され、AllowDBNull プロパティは「true」に設定されています。
新しい行を手動で作成し、このデータセットに追加したいと思います。次のような行を問題なく作成します。
MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();
大丈夫。ただし、値を DBNull に設定しようとすると、次のようになります。
myRow.MyCol = DBNull.Value;
それはできないと言われました...それを int にキャストすることはできません。これは、int として定義したので、ある意味では理にかなっていますが、では、そこに DBNull を取得するにはどうすればよいでしょうか?そこに DBNull を含めることはできないのでしょうか?それがAllowDBNullプロパティの目的ではないでしょうか?
明らかに基本的なものが欠けています。誰かがそれが何であるかを説明するのを手伝ってくれますか?
編集: また、「int?」を入力しようとしました。データ型として、しかしVisual Studioは入力するときにエラーをスローし、「列には有効なデータ型が必要だ」と言っています。
解決
MyDataTableRow クラスには、次の名前の生成されたメソッドがあります。SetMyColNull()。
myRow.SetMyColNull();
次のこともできます:
myRow["MyCol"] = DBNull.Value;
なぜなら myRow["MyCol"]
タイプです object
編集(質問OPによって追加):
この値を読み戻すために生成される対応するメソッド、IsMyColNull() もあります。
他のヒント
2つあります。
DBNull を許可することは、値を DBNull に設定できることとは別の設定です。
これを設定するために DataSet XSD インターフェイスのみを使用しました...ただし、「AllowDBNull = true」を設定するだけでなく、「NullValue = (null)」も設定する必要がありました。元々、「NullValue」は「(例外)」に設定されていました。これは、データセットが null を含む bieng .Fill()ed を受け入れることはできますが、手動で値を null に設定することはできないことを意味します。
これがあなたの問題かどうかはわかりませんが、同じように聞こえます。
データセットのデザイナー モードに移動し、null を有効にするフィールドを右クリックして、プロパティを選択し、プロパティ ウィンドウで、AllowDBNull を True に、NullValue を (NULL) に設定します。それは私にとっては正しいです!よろしくお願いします !
int は null を受け入れませんが、int?(INullable バージョン) は可能です。代わりにそのデータ型が必要だと思います。