如何在强类型数据集中包含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”。

+0

这可能会帮助:http://stackoverflow.com/questions/879095/nullable-int-column-in-dataset – 2009-09-22 18:07:43

你MyDataTableRow类有一个名为生成的方法:SetMyColNull()。

myRow.SetMyColNull(); 

你也可以这样做:

myRow["MyCol"] = DBNull.Value; 

因为myRow["MyCol"]类型为object

EDIT(由问题OP加):

还有生成一个对应方法为了读取这个值,IsMyColNull()。

+1

Egad!我怎么想/不知道这个?优秀!非常感谢! – Beska 2009-09-22 18:11:25

int不接受null,但int? (INullable版本)。我认为你需要这种数据类型。

+1

不幸的是,这不工作...我试过这个(我应该在问题中提到这一点......我会编辑它来做到这一点)。当我这样做时,它会弹出一个窗口,提示“列需要有效的数据类型”。 – Beska 2009-09-22 18:08:37

有两件事。

允许的DBNull是从能够将值设置为的DBNull单独设置。

我只使用DataSet XSD接口来设置这个...但我不得不设置“AllowDBNull = true”,但我也必须设置“NullValue =(null)”。原本“NullValue”被设置为“(Exception)”。这意味着数据集会接受bieng .Fill(),但是不允许您手动将该值设置为null。

不确定这是否是您的问题,但听起来很相似。

+0

这只适用于字符串... – 2012-05-23 03:39:27

只是去设计模式在数据集中,并右击场要启用为空,选择属性,在属性窗口,AllowDBNull设置为True,NullValue属性到(NULL); 它适合我! 最好的问候!

+0

这只适用于字符串... – 2012-05-23 03:38:52