1

我正在从 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在数据库表中命中 a,然后引发异常。

当抛出异常时,我需要将 0.00 的值分配给变量 Digit_Value 并且例程应该继续到下一条记录。许多谷歌搜索都没有发现任何有用的东西 - 任何指针?

4

3 回答 3

0

If the ExecuteScalar() method is returning Null (or DbNull?) then you need to detect that before trying to assign it to 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);
}
于 2013-02-21T21:43:30.823 回答
0

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

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

SELECT Value FROM Data WHERE Value like '@value' UNION select 0
于 2013-02-21T21:45:27.090 回答
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;
}
于 2013-02-21T21:58:53.827 回答