У меня есть эта веб-форма C #, в которой есть поле выбора даты. Если дата не установлена (по умолчанию), я хочу, чтобы она передавала 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}, как я думаю, и должно.
Тем не менее.
Когда он переходит к выполнению запроса, я нажимаю на лупу и вижу это:
UPDATE table SET [action_date] = '' WHERE [id] = 2488
Я бы хотел увидеть следующее:
UPDATE table SET [action_date] = 'Null' WHERE [id] = 2488
Поскольку action_date действительно никогда не устанавливается в NULL, тогда значение в поле даты и времени возвращается к «01.01.1900 12:00:00 AM», и это само по себе является болью.
Я попытался установить CMActionDate.Value для следующих значений безрезультатно (я получаю тот же результат, что и выше.):
- DBNull.Value;
- "NULL";
- SqlDateTime.Null;
- нуль;
Справка.
EDIT
Может быть, я не был ясен? Да, конечно, параметризованный запрос выглядит так:
"UPDATE CM_Codebase SET [action_date] = '" + @ActionDate + "' WHERE [id] = " + @CM_id + "";
Но когда я отлаживаю эту вещь в VS, я ставлю точку останова прямо перед ExecuteNonQuery (); так что я вижу SQL, который он пытается запустить. Именно там я вижу реальный SQL и вижу бит, где action_date = ''.
Это помогает?