我有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));
如何完成它?
答案 0 :(得分:1)
如果设置为空DBNull
cmd.Parameters.AddWithValue("@col_1", (object)val1 ??DBNull.Value);
答案 1 :(得分: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);
答案 2 :(得分:0)
您应该更改添加参数代码,如下所示:
if (val1.HasValue)
{
cmd.Parameters.AddWithValue("@col_1", val1.Value);
}
else
{
cmd.Parameters.AddWithValue("@col_1", DBNull.Value);
}