数据集与空值c#进行比较

时间:2012-03-01 14:11:40

标签: c# null dataset comparison

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崩溃了。我知道你可以使用Trycatching,但我不想使用它,因为它会让我的程序运行得更慢,而且它需要每天读取10000行......

错误:

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

意思是它找不到任何东西,但我已经知道了。

编辑: 我不想要错误。以前的所有方法都在其他情况下工作,返回indexoutofrange错误。我会加上这个...... 数据集由基于语音和其他数据的SQL服务器填充数据。 如果他找不到来自文本文件的phonenumber,他将不返回任何内容,没有行,没有列,什么也没有。

提前致谢, DZ

5 个答案:

答案 0 :(得分:3)

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

编辑:界限之外的索引可能意味着根本没有行。尝试用此替换你的if:

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

答案 1 :(得分:2)

这一行:

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);

答案 2 :(得分:0)

if((string)dts.Tables[0].Rows[0]["RECID"] is DBNull)
{ // will go here }

答案 3 :(得分:0)

发现它!

  

int strTables = dts.Tables [0] .Rows.Count;       if(strTables == 1){// code goes here}

答案 4 :(得分:0)

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

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