У меня есть объект 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
? Я не просто хочу передавать значения по умолчанию, если они равны нулю, поскольку схема базы данных допускает нулевые значения.
param
? Вы знаете, чтоAddWithValue
должен вывести тип из переданного объекта? Поскольку вы не получаете ошибку времени компиляции, предполагается, чтоparam
является объектом, что не является хорошей идеей. - person Tim Schmelter   schedule 23.09.2013String or binary data would be truncated. The statement has been terminated.
. Спасибо всем за помощь направить меня в правильном направлении. - person Cameron Tinker   schedule 24.09.2013