0

私はintを持っていますか?null または何らかの値を持つ型の値。パラメータ化されたクエリを使用して挿入ステートメントを実行し、それに応じて挿入したいと考えています。

int? val1=null; 
SqlCeCommand cmd;
string insert = "insert into table(col1)values(@col_1)";
cmd = new SqlCeCommand();
cmd.CommandText = insert;
cmd.Parameters.AddWithValue("@col_1", val1 ?? Convert.ToInt32(DBNull.Value)));
cmd.Connection = cn1;
cn1.Open();
cmd.ExecuteNonQuery();
cn1.Close();

このコードは、フォーマット例外エラーをスローします。私も試してみました

cmd.Parameters.AddWithValue("@col_1", (!val1.HasValue) ? val1 : Convert.ToInt32(DBNull.Value));

どのようにすればよいですか?

4

3 に答える 3

1

null が設定されている場合は変換する必要はありませんDBNull

cmd.Parameters.AddWithValue("@col_1", (object)val1 ??DBNull.Value);
于 2013-05-29T06:51:20.420 に答える
1

行を次のように変更するとうまくいくと思います:

cmd.Parameters.AddWithValue("@col_1", val1 ?? DBNull.Value);

これにより、パラメータ値がオブジェクト タイプに設定されるためです。

何らかの理由で失敗した場合は、結果を次のようなオブジェクトにキャストしてみてください。

cmd.Parameters.AddWithValue("@col_1", (object)(val1 ?? DBNull.Value));

しかし、これは必要ありません。

編集:実際には、これはうまくいくはずです:

cmd.Parameters.AddWithValue("@col_1", val1 ?? (object)DBNull.Value);
于 2013-05-29T06:52:11.913 に答える
0

次のように追加パラメーター コードを変更する必要があります。

if (val1.HasValue)
{
    cmd.Parameters.AddWithValue("@col_1", val1.Value);
}
else
{
    cmd.Parameters.AddWithValue("@col_1", DBNull.Value);
}
于 2013-05-29T06:52:08.260 に答える