代码之家  ›  专栏  ›  技术社区  ›  Beska

如何在强类型数据集中包含dbnull作为值?

  •  8
  • Beska  · 技术社区  · 15 年前

    我在.NET应用程序中创建了一个强类型数据集(MyDataSet)。为了简单起见,我们将说它有一个数据表(mydatatable),有一个列(mycol)。 mycol的datatype属性设置为“system.int32”,而allowdbnull属性设置为“true”。

    我想手动创建一个新行,并将其添加到此数据集。我创建的行没有问题,有如下内容:

    MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();
    

    好的。但是,当我尝试将值设置为dbnull时:

    myRow.MyCol = DBNull.Value;
    

    我被告知我做不到……它不能把它转换成一个in t。从某种意义上说,这是有道理的,因为我把它定义为一个in t……但是我怎么能得到dbnull呢?我不应该在里面有dbnull吗?这不是allowdbnull属性的作用吗?

    我显然错过了一些基本的东西。有人能解释一下是什么吗?

    编辑: 我还试着输入“int”?作为数据类型,但当我输入时,Visual Studio会抛出一个错误,即“列需要有效的数据类型”。

    4 回复  |  直到 14 年前
        1
  •  13
  •   Beska    15 年前

    在MyDataTableRow类中有一个名为:setMyColNull()的生成方法。

    myRow.SetMyColNull();
    

    您还可以执行以下操作:

    myRow["MyCol"] = DBNull.Value;
    

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

    编辑(由问题op添加):

    还生成了一个对应的方法来读取这个值back out,ismycolnull()。

        2
  •  1
  •   Bill Crim    15 年前

    有两件事。

    允许dbnull是一个独立的设置,不能将值设置为dbnull。

    我只使用了DataSet XSD接口来设置…但我不仅要设置“allowdbnull=true”,还要设置“nullvalue=(null)”。最初“nullValue”设置为“(exception)”。这意味着数据集将接受带空的bieng.fill()ed,但不允许手动将值设置为空。

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

        3
  •  1
  •   amin10043    14 年前

    只需转到数据集中的设计器模式,右键单击要启用空的字段,然后选择属性,在属性窗口中,将allowdbnull设置为true,将nullvalue设置为(空); 它对我有用,对吧! 最好的问候!

        4
  •  0
  •   Stuart Thompson    15 年前

    int不接受空值,但int?(不能使用的版本)可以。我想你需要那个数据类型。

    推荐文章