DataTable select返回DBNull而不是字符串值

时间:2019-04-15 09:21:49

标签: c#

在我的代码中,Datatable具有整数类型的值。 而且,当我使用select方法时,所选的行具有{} DBNull而不是int

首先,感谢您的回答。但是这些答案不理解我的问题。 所以,我再次总结我的问题。

1。我的代码

      dtGo.Rows.InsertAt(_drGo, 0);
      string _filter = "CODE = '" + _code + "'";
      DataRow[] _drArray = dtGo.Select(_filter);

2。 Visual Studio手表显示以下内容

我的表dtGo有101列。当我选择           _drArray = dtGo.select(_filter);           _drArray具有3个列值错误,而其他列具有正确值           价值观。

在Visual Studio监视结果下面查找。 dtGo观看节目...

      dtGo.Rows[0]  {Systems.Data.DataRow}  System.Data.DataRow
        ItemArray   {object[101]}           object[]
          [0]       "Go호가"                object{string}
          [1]       "001000"                object{string}
          [2]       "신라섬유"               object{string}
          [3]       151453                  object{int}
          ...

和_drArray手表显示...

      _drArray[0].ItemArray  {object[101]}  object[]
          [0]       "Go호가"                object{string}
          [1]       "001000"                object{string}
          [2]       "신라섬유"               object{string}
          [3]       {}                      object{System.DBNull}

再次提问。如您所见,select方法返回了一些行。除第3列外,其他数据表的值均正确。但是在第3列中,dtGo有值,但_drArray有DBNull。

请帮助我如何解决此问题... 我添加了捕获图像。

dtGo手表: dtGo watch

_drArray监视: _drArray watch

2 个答案:

答案 0 :(得分:0)

有一件事,您可以将int数据类型更改为Nullable<int>int?来处理。

答案 1 :(得分:0)

谢谢。我得到一个提示并从您的答案中解决了。

原因,我不知道。但是我猜是因为我使用了Insert(_drGo,0)而不是Add(_drGo)。

我用这段代码解决了。

DataRow[] _drArray = dtGo호가.AsEnumerable()
    .Where(row => row.Field<string>(dtPrefGo호가 + "CODE") == _code)
    .ToArray();

这将返回与数据表相同的行顺序。 dtGo.Select方法将行顺序从dtGo.Rows.Length重新设置为0。

谢谢大家.....