将空参数发送到 SQL 服务器
本文关键字:SQL 服务器 参数 | 更新日期: 2023-09-27 18:32:23
我有一个用于更新数据库表的SqlCommand
对象,但它无法正确解释我的空值。
以下是 SQL:
UPDATE dbo.tbl
SET param1 = @param1,
param2 = @param2,
param3 = @param3,
param4 = @param4,
param5 = @param5,
param6 = @param6,
param7 = @param7,
param8 = @param8,
param9 = @param9,
param10 = @param10
WHERE param11 = @param11
我已经尝试过像这样可为空的空合并参数,但我没有任何成功。除非另有说明,否则所有参数都是字符串:
command.Parameters.AddWithValue("@param1", param1 ?? DBNull.Value);
command.Parameters.AddWithValue("@param2", param2 ?? DBNull.Value);
command.Parameters.AddWithValue("@param3", param3 ?? DBNull.Value);
command.Parameters.AddWithValue("@param4", param4 ?? DBNull.Value);
command.Parameters.AddWithValue("@param5", param5 ?? DBNull.Value);
// param6 is nullable type DateTime?
command.Parameters.AddWithValue("@param6", param6 ?? DBNull.Value);
command.Parameters.AddWithValue("@param7", param7 ?? DBNull.Value);
// param8 is nullable type DateTime?
command.Parameters.AddWithValue("@param8", param8 ?? DBNull.Value);
command.Parameters.AddWithValue("@param9", param9 ?? DBNull.Value);
// param10 nullable type float?
command.Parameters.AddWithValue("@param10", param10 ?? DBNull.Value);
command.Parameters.AddWithValue("@param11", param11 ?? DBNull.Value);
我得到这样的异常:
The parameterized query '(@param1 nvarchar(4000),@param2 nvarchar(4000),@param3 nvarc' expects the parameter '@param4', which was not supplied.
我还尝试在将每个参数添加到 SqlCommand 对象后循环访问每个参数,以设置 DbNull.Value,如果参数值为 null,如下所示:
foreach (SqlParameter parameter in command.Parameters)
{
if (parameter.Value == null)
{
parameter.Value = DBNull.Value;
}
}
但是,此方法会导致异常:
String or binary data would be truncated.
The statement has been terminated.
将空参数传递给SqlCommand
的最佳实践是什么?如果默认值为 null,我不想简单地传入默认值,因为数据库架构允许 null 值。
试试这个:
command.Parameters.AddWithValue("@param1", param1 ?? Convert.DBNull);
嗨,
尝试使用以下 synatx:
command.parameters.add("@ParameterName",DBNull.value);
希望这有帮助
commandObject.Parameters.AddWithValue("@parameterName",Convert.DBNull);