问题 C#DataTable ItemArray返回'{}' - 如何测试空值?


我有一个 DataTable resultSet;  - 我正在尝试检查字段为null,但是返回一个'{}'(空集?)对象。涉及“{}”的搜索不会产生任何适当的解决方案。

当“fk_id”字段为null时,这是无法按预期工作的代码:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == null)
{
   //never reaches here
}

注意:使用int索引而不是 Columns.IndexOf() 不是问题。

“{}”在C#中还有其他名称吗?


8518
2018-04-01 22:55


起源



答案:


要在DataSet中检查DBNull的列,可以使用 一片空白 方法:

if (resultSet.Rows[0].IsNull("fk_id"))

你的比较 null 可能是失败的,因为DataSet不使用 null 表示“数据库NULL”值 - 他们使用 DBNull.Value。如果您需要代码以您呈现的方式工作,请尝试以下方法:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == DBNull.Value)

19
2018-04-01 23:01



非常感谢你,完全忘记了“DBNull.Value” - 自从我操纵数据集以来已经有一段时间了 - Nick Josevski
我想知道为什么他们这样设计它而不是只使用null? - Kimball Robinson
@ k.rob因为.NET 1.0中没有Nullable <T>,所以无法表示Int32值为“null”。 - Matt Hamilton
谢谢。这有帮助。 - Kimball Robinson
你也可以使用Convert.IsDBNull(value) - Kimball Robinson


答案:


要在DataSet中检查DBNull的列,可以使用 一片空白 方法:

if (resultSet.Rows[0].IsNull("fk_id"))

你的比较 null 可能是失败的,因为DataSet不使用 null 表示“数据库NULL”值 - 他们使用 DBNull.Value。如果您需要代码以您呈现的方式工作,请尝试以下方法:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == DBNull.Value)

19
2018-04-01 23:01



非常感谢你,完全忘记了“DBNull.Value” - 自从我操纵数据集以来已经有一段时间了 - Nick Josevski
我想知道为什么他们这样设计它而不是只使用null? - Kimball Robinson
@ k.rob因为.NET 1.0中没有Nullable <T>,所以无法表示Int32值为“null”。 - Matt Hamilton
谢谢。这有帮助。 - Kimball Robinson
你也可以使用Convert.IsDBNull(value) - Kimball Robinson


try
{
    if (DT.Rows[0][0] != null)
    {      
      //your code
    }    
}    
catch    
{    
    MessageBox.Show("AUTHANICATION FAILED.");    
}

-2
2018-05-16 22:45





请用:

dataTable.Select("FieldName is NULL")

这将为您提供FieldName列中具有空值的DataRows。


-2
2018-01-26 07:24