如何在强类型数据集中包含DBNull作为值?
我在我的.NET应用程序中创建了一个强类型数据集(MyDataSet)。为了简单起见,我们会说它有一个DataTable(MyDataTable)和一列(MyCol)。 MyCol将其DataType属性设置为“System.Int32”,并将其AllowDBNull属性设置为“true”。如何在强类型数据集中包含DBNull作为值?
我想手动创建一个新的行,并将其添加到数据集。我创建了一个没有问题的行,如下所示:
MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();
很好。然而,当我尝试将值设置为DBNull的:
myRow.MyCol = DBNull.Value;
有人告诉我,我不能这样做......它不能强制转换为int。从某种意义上讲,这是有道理的,因为我已经将它定义为一个int ...但是那么我怎样才能在那里获得DBNull?我不应该能够在那里有DBNull?这不是AllowDBNull属性的用途吗?
我明显失去了一些fundemental。有人可以帮助解释它是什么吗?
编辑:我也尝试进入 “INT?”作为DataType,但Visual Studio在输入时会引发错误,并说“列需要有效的DataType”。
你MyDataTableRow类有一个名为生成的方法:SetMyColNull()。
myRow.SetMyColNull();
你也可以这样做:
myRow["MyCol"] = DBNull.Value;
因为myRow["MyCol"]
类型为object
EDIT(由问题OP加):
还有生成一个对应方法为了读取这个值,IsMyColNull()。
Egad!我怎么想/不知道这个?优秀!非常感谢! – Beska 2009-09-22 18:11:25
int不接受null,但int? (INullable版本)。我认为你需要这种数据类型。
不幸的是,这不工作...我试过这个(我应该在问题中提到这一点......我会编辑它来做到这一点)。当我这样做时,它会弹出一个窗口,提示“列需要有效的数据类型”。 – Beska 2009-09-22 18:08:37
有两件事。
允许的DBNull是从能够将值设置为的DBNull单独设置。
我只使用DataSet XSD接口来设置这个...但我不得不设置“AllowDBNull = true”,但我也必须设置“NullValue =(null)”。原本“NullValue”被设置为“(Exception)”。这意味着数据集会接受bieng .Fill(),但是不允许您手动将该值设置为null。
不确定这是否是您的问题,但听起来很相似。
这只适用于字符串... – 2012-05-23 03:39:27
只是去设计模式在数据集中,并右击场要启用为空,选择属性,在属性窗口,AllowDBNull设置为True,NullValue属性到(NULL); 它适合我! 最好的问候!
这只适用于字符串... – 2012-05-23 03:38:52
这可能会帮助:http://stackoverflow.com/questions/879095/nullable-int-column-in-dataset – 2009-09-22 18:07:43