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
答案 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)