У меня есть объект SqlCommand
, который я использую для обновления таблицы базы данных, но он не интерпретирует мои нулевые значения правильно.Отправка нулевых параметров на сервер Sql
Вот 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, если значение параметра равно нулю, как это:
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' - объект, который не является хорошей идеей. –
DBNull - на самом деле лучшая практика (единственный способ) передать NULL для параметра. Вы уверены, что ошибка обрезания строки не вызвана чем-то другим? Передача NULL shoudln't вызывает эту ошибку ... Может быть, попытайтесь контролировать утверждение, которое получает excecuted в вашей БД и пытается идентифицировать «реальную» ошибку. – MichaC
У меня есть 11 параметров, каждый из которых является строкой, DateTime или float , Я использовал общий параметр имени для маскировки бизнес-логики. –