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

データベーステーブルのaにヒットするまで、すべてが必要に応じて機能しNull、その後、例外がスローされます。

例外がスローされたときに変数Digit_Valueに0.00の値を割り当てる必要があり、ルーチンは次のレコードに進む必要があります。多くのグーグル検索は、機能するものを何も発見していません-何かポインタはありますか?

4

3 に答える 3

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);
}
于 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 に答える