【问题标题】:how to check if a datareader is null or empty - Error如何检查数据读取器是否为空或为空 - 错误
【发布时间】:2016-02-04 09:59:33
【问题描述】:

我使用 Sqlite 作为后端,使用 Windows 窗体应用程序 (C#) 作为前端。

我正在浏览这段代码:

cmdgetTransaction_ID = new SQLiteCommand("SELECT MAX(transaction_id) as expr1  FROM  transaction_master WHERE transaction_id LIKE '"+temp+"%' ", con);
SQLiteDataReader reader = cmdgetTransaction_ID.ExecuteReader();
if (reader["expr1"]!=DBNull.Value)
{
     name= reader.GetString(0);
     string[] substrings = System.Text.RegularExpressions.Regex.Split(name, "([a-z]+)|([0-9]+)");
     MessageBox.Show(substrings[0]);
}
else
{
     name=name+temp+"1";
     lblTranID.Text = name;
}

我也试过这个:if (reader.IsDBNull(0))

在调试(进入)时,它会报告以下异常:

System.Data.SQLite.dll 中发生了“System.InvalidOperationException”类型的第一次机会异常

我无法弄清楚我在做什么错误,因此它会产生异常。

【问题讨论】:

  • 您的标题具有误导性或内容。你想检查 reader 是否有个人列的行或 null 吗?
  • 错误出现在哪一行?
  • @dotnetkid - 实际上我有兴趣检查我的数据读取器对象是否为空或是否有任何记录
  • @Steve ---> 在线 ---- if (reader["expr1"]!=DBNull.Value)

标签: c# sqlite


【解决方案1】:

这应该适合你:

if (reader != null && reader.HasRows) 
{
   while (reader.Read()) 
   {
      ...
   }
}

【讨论】:

  • 问题仍然存在:即使数据读取器不包含任何记录,如果条件变为真,它也会进入 while 循环,因为没有数据会引发异常 - 我已附上屏幕截图
  • 当您在while 行或之后尝试阅读expr1 列时是否会引发异常?也不要编辑发布自己的屏幕截图的答案。请改用 cmets。
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2014-03-09
  • 1970-01-01
  • 2011-01-23
相关资源
最近更新 更多