处理SQL Server中的空GUID和强类型数据集

时间:2009-05-08 20:19:22

标签: sql-server guid strongly-typed-dataset tableadapter null-uniqueidentifier

我在SQL server中有一个表:

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

ParentCategoryID用于在CategoryID中保存一个值,以指示哪个类别是父类。如果它没有父级(即它是顶级类别),则ParentCategoryID应为null。

我正在使用强类型数据集(表适配器),而对于ParentCategoryID的属性,它不允许它为null。我试图更改类型化数据集中字段的属性,但它表示尝试使guid“空”或“无”无效。唯一的选择是在null上抛出异常。这会导致错误:

表'Categories'中列'ParentCategoryID'的值是DBNull。

它是这样的,或者在使用类型化数据集时是否有办法处理空GUID / uniqueidentifier?

1 个答案:

答案 0 :(得分:2)

如果您已经使用了Visual Studio生成器并且已经为您的表正确检测到了所有内容,那么可以为空的列将在您的强类型DataRow上生成以下内容:

  1. 以表列名称(“ParentCategoryID”)
  2. 命名的公共属性
  3. 检测空条目的公共方法(“bool IsParentCategoryIDNull()”)
  4. 将条目“空”的公共方法(“void SetParentCategoryIDNull()”)
  5. 鉴于您的强类型表名为“我的”(生成MyDataTableMyDataRow),您的DataSet名为MyDataSetType,实例名为{{ 1}}:

    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); 的实现,了解用于执行“归零”的内容。

    此外,要检测“null guid”:

    SetParentCategoryID

    所以现在你有三种不同类型的值来表示状态:

    1. 数据库/数据集中的空条目(无父类别)
    2. 数据库中的非空条目(可能是父类别)
    3. 数据库中的非空条目,即空(if (row.IsParentCategoryIDNull()) { //Do something spectacular } )guid(???)
    4. 当我第一次遇到这个问题时,我认为应该使用Guid.Empty来表示数据库中的空条目,但这需要自定义处理guid类型。使用包装函数,强类型数据集可以根据结构样式类型提供对任意数量可空列的一致处理。