具有Null值c#的数据集比较

本文关键字:数据集 比较 Null 具有 | 更新日期: 2023-09-27 18:26:11

Goodday

我似乎无法在Null比较中使用我的数据集我试图做一个语句(下面的尝试),它只会在数据集为空时继续我的代码。

代码1:

if ((string)dts.Tables[0].Rows[0]["RECID"] != null)

^只是跳过我的if,我知道它是空的(检查了我的手表),即使它是空也会继续。

代码2:

 long Recid = 0;
 Boolean checkrecid = long.TryParse((string)dts.Tables[0].Rows[0]["RECID"], out Recid);
 if (checkrecid == false)

^在我的Tryparse上崩溃。我知道你可以使用Trykatching,但我不想使用它,因为它会让我的程序运行得更慢,而且它每天需要读取10000行。。。

错误:

A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll

这意味着它什么都找不到,但我已经知道了。

编辑:我不希望出现错误。任何以前的方法,在其他情况下都有效,都会返回一个范围错误的索引。我将添加此。。数据集填充了来自SQL服务器的基于电话号码和其他数据的数据。如果他找不到来自文本文件的电话号码,他将什么都不返回,没有行,没有列,什么也不返回

提前感谢,DZ

具有Null值c#的数据集比较

您需要使用DBNull.Value而不是空

编辑:超出界限的索引可能意味着根本没有行。试着用这个替换你的if:

if (dts.Tables[0].Rows.Count > 0 && dts.Tables[0].Rows[0]["RECID"] != DBNull.Value)
{
}

此行:

if ((string)dts.Tables[0].Rows[0]["RECID"] != null)

需要

if ((string)dts.Tables[0].Rows[0]["RECID"] != DBNull.Value)

或者你可以删除那张支票:

Boolean checkrecid = long.TryParse((dts.Tables[0].Rows[0]["RECID"] ?? string.Empty), out Recid);
if((string)dts.Tables[0].Rows[0]["RECID"] is DBNull)
{ // will go here }

找到了!

int strTables=dts。Tables[0]。Rows.Count;如果(strTables==1){//代码转到此处}

类型安全的替代方法是使用Field扩展方法。它将返回"null"而不是DBNull。空字段的值。

if (dts.Tables[0].Rows[0].Field<string>("RECID") != null)