SQLite数据库查询异常处理

时间:2013-02-21 21:31:49

标签: c# database exception

我正在检索一些SQLite数据库表和数据库中的数据。我使用以下代码: -

try
{
  for (double i = 10; i < 100; i++)
  {
    // Read in value
    cmd.CommandText = "SELECT Value FROM Data WHERE Value like '" + i + "'";
    Digit_Value = Convert.ToDouble(cmd.ExecuteScalar());
  }
catch (Exception)
{
  throw;
}

所有工作都按需要工作,直到它到达数据库表中的Null,然后抛出异常。

当抛出异常时,我需要将值0.00分配给变量Digit_Value&amp;例程应该继续下一个记录。许多谷歌搜索发现没有任何可行的 - 任何指针?

3 个答案:

答案 0 :(得分:0)

如果ExecuteScalar()方法返回Null(或DbNull?),那么在尝试将其分配给Digit_Value之前需要检测它:

cmd.CommandText = "SELECT Value FROM Data WHERE Value like '" + i + "'";
object o = cmd.ExecuteScalar();
if(o == Null) {
  throw new Exception("Got null");
} else {
  Digit_Value = Convert.ToDouble(o);
}

答案 1 :(得分:0)

ExecuteScalar返回查询中第一行的第一个单元格(MSDN Reference)。

鉴于此,只需将您的查询修改为:

SELECT Value FROM Data WHERE Value like '@value' UNION select 0

答案 2 :(得分:0)

如果您不使用LIKE的通配符,请改用=

try
{
  cmd.Parameters.Add("@val", SqlDbType.Int32);
  cmd.CommandText = "SELECT Value FROM Data WHERE Value = @val";

  for (double i = 10; i < 100; i++)
  {
    // Read in value
    cmd.Parameters["@val"].Value = i;
    object res = cmd.ExecuteScalar();
    double? Digit_Value = DBNull.Value.Equals(res) ? null : Convert.ToDouble(res);
  }
catch (Exception)
{
  throw;
}
相关问题