cmd.Parameters.AddWithValue("@param1",param1 ?? Db

本文关键字:quot param1 Parameters Db @param1 cmd AddWithValue | 更新日期: 2023-09-27 18:15:44

我有int?Type value可以是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));

应该怎么做?

cmd.Parameters.AddWithValue("@param1",param1 ?? Db

不需要转换空集DBNull

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

我相信把这一行改成下面的行应该会起作用:

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

您应该像这样更改add参数代码:

if (val1.HasValue)
{
    cmd.Parameters.AddWithValue("@col_1", val1.Value);
}
else
{
    cmd.Parameters.AddWithValue("@col_1", DBNull.Value);
}