1

SQL サーバーにテーブルがあります。

Categories
--------------
CategoryID (uniqueidentifier)
ParentCategoryID (uniqueidentifier) allow nulls

ParentCategoryID は、どのカテゴリが親であるかを示すために、CategoryID に値を保持するためのものです。親を持たない (つまり、トップ カテゴリである) 場合、ParentCategoryID は null である必要があります。

厳密に型指定されたデータセット (テーブル アダプター) を使用していますが、ParentCategoryID のプロパティについては、null にすることはできません。型指定されたデータセットのフィールドのプロパティを変更しようとしましたが、GUID を「空」または「何も」作成しようとしても無効であると表示されます。唯一のオプションは、null で例外をスローすることです。これにより、エラーが発生します。

テーブル 'Categories' の列 'ParentCategoryID ' の値は DBNull です。

これはどうですか、または型指定されたデータセットを使用するときに null GUID/uniqueidentifiers を処理する方法はありますか?

4

1 に答える 1

2

Visual Studio ジェネレーターを使用し、すべてがテーブルに対して適切に検出された場合、null 許容列は、厳密に型指定された DataRow で次を生成します。

  1. テーブル列名 ("ParentCategoryID") の名前が付けられたパブリック プロパティ
  2. null エントリを検出するパブリック メソッド ("bool IsParentCategoryIDNull()")
  3. エントリを「null」にする public メソッド (「void SetParentCategoryIDNull()」)

厳密に型指定されたテーブルの名前が "My" (Generates MyDataTableand MyDataRow) であるとすると、あなたのDataSet名前MyDataSetTypeは 、インスタンスの名前はmyDataSet:

MyDataSetType.MyRow row = myDataSet.My.NewMyRow();
row.ParentCategoryID = Guid.Empty; //OPTION 1: explicitly set GUID
row.SetParentCategoryIDNull(); //OPTION 2: explicitly set Null
myDataSet.My.AddMyRow(row);

の実装をSetParentCategoryID見て、「nulling」を行うために何が使用されているかを確認することもできます。

さらに、「null GUID」を検出するには:

if (row.IsParentCategoryIDNull())
{
  //Do something spectacular
}

これで、状態を表す 3 つの異なるタイプの値ができました。

  1. データベース/データセットの null エントリ (親カテゴリなし)
  2. データベース内の null 以外のエントリ (親カテゴリ、おそらく)
  3. 空の ( Guid.Empty) GUID (???)であるデータベース内の null 以外のエントリ

最初にこの問題に遭遇したときGuid.Empty、データベース内の null エントリを表すために使用する必要があると考えましたが、それには guid 型のカスタム処理が必要でした。ラッパー関数を使用すると、厳密に型指定されたデータセットは、構造体スタイルの型に基づいて、任意の数の null 許容列の一貫した処理を提供できます。

于 2009-05-08T21:19:51.747 に答える