我在我的.NET应用程序中创建了一个强类型数据集(MyDataSet)。为简单起见,我们假设它有一个DataTable(MyDataTable),一列(MyCol)。 MyCol的DataType属性设置为“System.Int32”,其AllowDBNull属性设置为“true”。
我想手动创建一个新行,并将其添加到此数据集中。我创建了没有问题的行,例如:
MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();
精细。但是,当我尝试将值设置为DBNull时:
myRow.MyCol = DBNull.Value;
我被告知我不能这样做......它无法将其转换为int。从某种意义上说,这是有道理的,因为我已经将它定义为一个int ...但是我怎样才能在那里得到DBNull?我不应该在那里有DBNull吗?这不是AllowDBNull属性的用途吗?
我显然错过了一些有趣的东西。有人可以帮忙解释它是什么吗?
编辑:我也试过输入“int?”作为DataType,但是当我输入它时Visual Studio会抛出一个错误,说“Column需要一个有效的DataType。”
答案 0 :(得分:13)
你在MyDataTableRow类中有一个名为SetMyColNull()的生成方法。
myRow.SetMyColNull();
你也可以这样做:
myRow["MyCol"] = DBNull.Value;
因为myRow["MyCol"]
的类型为object
编辑(由问题OP添加):
还有一个用于读取此值的对应方法,IsMyColNull()。
答案 1 :(得分:1)
有两件事。
允许DBNull是一个单独的设置,可以将值设置为DBNull。
我只使用DataSet XSD接口来设置它...但我不仅要设置“AllowDBNull = true”,而且还必须设置“NullValue =(null)”。最初“NullValue”被设置为“(例外)”。这意味着数据集将接受bieng .Fill()ed with null,但不允许您手动将值设置为null。
不确定这是不是你的问题,但听起来很相似。
答案 2 :(得分:1)
只需转到数据集中的设计器模式,右键单击要启用null的字段,然后在属性窗口中选择属性,将AllowDBNull设置为True,将NullValue设置为(NULL); 它对我有用! 最好的问候!
答案 3 :(得分:0)
int不接受null,但是int? (可以使用的版本)。我认为你需要那种数据类型。