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

如果设置为空,则无需转换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 回答