У меня есть веб-форма C#, у которой есть блок выбора даты. Если дата не установлена (по умолчанию), я хочу передать NULL в базу данных. Это происходит в моем параметризованном запросе.Мой SQLParameter не передает NULL правильно
SqlParameter CMActionDate = new SqlParameter();
CMActionDate.ParameterName = "@ActionDate";
if (ActionDate.Equals(""))
{
CMActionDate.Value = System.Data.SqlTypes.SqlDateTime.Null;
}
else
{
CMActionDate.Value = ActionDate;
}
При включении отладки я вижу, что дата действительно «» так он идет в заявлении IF и устанавливает actiondate.value до {Null}, как я думаю, что это должно быть.
Однако.
Когда затем идет выполнить nonquery, я нажимаю лупу и увидеть это:
UPDATE table SET [action_date] = '' WHERE [id] = 2488
То, что я хотел бы видеть это:
UPDATE table SET [action_date] = 'Null' WHERE [id] = 2488
Поскольку ACTION_DATE никогда на самом деле получает значение NULL, тогда значение в поле datetime возвращается к «01/01/1900 12:00:00 AM», и это само по себе.
Я попытался установить CMActionDate.Value следующие значения не дало никаких результатов (я получить тот же результат, что и выше.):
- DBNull.Value;
- "NULL";
- SqlDateTime.Null;
- null;
Помощь.
EDIT
Может быть, я не ясно? Да, конечно, параметризованные запросы выглядят следующим образом:
"UPDATE CM_Codebase SET [action_date] = '" + @ActionDate + "' WHERE [id] = " + @CM_id + "";
Но когда я отладки этой вещи в VS, я поставил точку останова прямо перед ExecuteNonQuery(); поэтому я могу увидеть SQL, который он пытается запустить. Там я вижу фактический SQL и вижу бит где action_date = ''.
Помогло ли это?
Вы делаете это неправильно. Прочтите код в моем ответе снова. По-прежнему вам приходится пытаться использовать параметр, такой как переменная подстановки, и с точки зрения кода C#, что просто не так. –
Обратите внимание, что в моем коде не существует одиночных кавычек вокруг @ActionDate, и я включаю @ActionDate в запрос как еще одну часть строкового литерала. –