我在SQL server中有一个表:
Categories
--------------
CategoryID (uniqueidentifier)
ParentCategoryID (uniqueidentifier) allow nulls
ParentCategoryID用于在CategoryID中保存一个值,以指示哪个类别是父类。如果它没有父级(即它是顶级类别),则ParentCategoryID应为null。
我正在使用强类型数据集(表适配器),而对于ParentCategoryID的属性,它不允许它为null。我试图更改类型化数据集中字段的属性,但它表示尝试使guid“空”或“无”无效。唯一的选择是在null上抛出异常。这会导致错误:
表'Categories'中列'ParentCategoryID'的值是DBNull。
它是这样的,或者在使用类型化数据集时是否有办法处理空GUID / uniqueidentifier?
答案 0 :(得分:2)
如果您已经使用了Visual Studio生成器并且已经为您的表正确检测到了所有内容,那么可以为空的列将在您的强类型DataRow上生成以下内容:
鉴于您的强类型表名为“我的”(生成MyDataTable
和MyDataRow
),您的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
所以现在你有三种不同类型的值来表示状态:
if (row.IsParentCategoryIDNull())
{
//Do something spectacular
}
)guid(???)当我第一次遇到这个问题时,我认为应该使用Guid.Empty
来表示数据库中的空条目,但这需要自定义处理guid类型。使用包装函数,强类型数据集可以根据结构样式类型提供对任意数量可空列的一致处理。