Отправка нулевых параметров на Sql Server

У меня есть 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, если значение параметра равно нулю, например:

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? Я не хочу просто передавать значения по умолчанию, если они нулевые, поскольку схема базы данных допускает нулевые значения.

3 ответа

Решение

Попробуй это:

command.Parameters.AddWithValue("@param1", param1 ?? Convert.DBNull);

Привет попробуйте использовать следующий синтаксис:

command.parameters.add("@ParameterName",DBNull.value);

надеюсь это поможет

commandObject.Parameters.AddWithValue("@parameterName",Convert.DBNull);
Другие вопросы по тегам