Передача null значения типа SqlDateTime в Stored Proc C#
Быстрый ответ
Для передачи значения NULL в SQL хранимую процедуру используйте DBNull.Value
вот так:
var cmd = new SqlCommand("proc", conn) { CommandType = CommandType.StoredProcedure };
cmd.Parameters.AddWithValue("@Param", yourVar ?? DBNull.Value);
Если yourVar
будет равно null
, будет использовано значение DBNull.Value
, которое в SQL корректно воспринимается как NULL.
Примеры передачи значения null для разных типов данных в C#
Рассматривая разные типы данных в C#, давайте посмотрим, как передать значение null в SQL хранимую процедуру:
Nullable ссылочные типы данных:
cmd.Parameters.AddWithValue("@NullableString", nullableStringVar ?? DBNull.Value);
Nullable типы значений, например, DateTime:
cmd.Parameters.AddWithValue("@NullableDateTime", nullableDateTimeVar.HasValue ? nullableDateTimeVar.Value : DBNull.Value);
Или используйте более сжатый синтаксис:
cmd.Parameters.AddWithValue("@NullableDateTime", (object)nullableDateTimeVar ?? DBNull.Value);
Упрощение работы с DBNull с помощью функции конвертации
Определите функцию ToDBNull:
public static object ToDBNull(object value)
{
return value ?? DBNull.Value;
}
И примените данную функцию:
cmd.Parameters.AddWithValue("@Param", ToDBNull(yourVar));
Настройка SQL хранимых процедур для использования параметров со значением NULL по умолчанию:
Объявите параметры в SQL хранимой процедуре с опцией DEFAULT NULL:
CREATE PROCEDURE ProcName
@Param DateTime = NULL
AS
BEGIN
END
Таким образом, если параметр не обязателен, его можно не указывать:
if (yourVar != null)
{
cmd.Parameters.AddWithValue("@Param", yourVar);
}
Визуализация
Для большей наглядности воспользуемся аналогией с телефонным разговором, чтобы объяснить процесс передачи значения null
в SQL хранимую процедуру:
Звонящий из C# (📞): "Привет, SQL-процедура! К тебе идет гость."
SQL-процедура (🏢): "Прекрасно! Кто это?"
Звонящий из C# (📞): "Ну, это может быть мистер Null (🚫👤)."
SQL-процедура (🏢): "Никаких проблем, мы готовы принять Null."
**Вызов параметра**: `command.Parameters.AddWithValue("@ParameterName", variable ?? DBNull.Value);`
**Обработка в SQL**: `IF @ParameterName IS NULL BEGIN -- Обработка null START END`
Помните: 🚫👤 = Мистер Null может и не прийти, но мы к этому готовы!
Полезные материалы
- Класс DBNull (System) | Microsoft Learn – освойте навыки обработки значений null в .NET с помощью обучающих материалов от Microsoft.
- c# – SQL Data Reader – handling Null column values – Stack Overflow – посмотрите рекомендации сообщества по обработке значений null при чтении данных из SQL на Stack Overflow.
- Sql Server – How To Write a Stored Procedure in SQL Server – CodeProject – узнайте, как создавать и использовать хранимые процедуры в SQL Server с помощью этого простого руководства от CodeProject.
- Parameterized Queries in C# with SqlCommand class – освойте нюансы работы с SQL Server, используя параметризованные запросы в C#, благодаря этому материалу от C# Corner.
- Different Options for Query Results in SQL Server Management Studio – попробуйте различные варианты отображения результатов запросов в SQL Server Management Studio с MSSqltips.