C# вставка даты и времени сбоя

У меня есть база данных с таблицей под названием Fio_FinalSched который в свою очередь имеет столбец с именем FinalDate с типом smalldatetime. Я конвертирую строку даты в DateTime введите по:

DateTime theDate = Convert.ToDateTime("2010-01-05 23:50:00");

Затем я создаю командную строку:

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ("+theDate+")";

Затем включите его в команду SQL:

SqlCommand myCommand = new SqlCommand(testCommand,conn);

где conn это соединение БД. Наконец, я выполняю команду:

myCommand.ExecuteNonQuery();

Когда я запускаю это, он попадает в строку выполнения, а затем выдает мне ошибку:

Incorrect syntax near '11'.

Я попытался изменить формат моей строки даты несколькими способами, но безрезультатно. Это потому, что моя база данных хочет smalldatetime типа а не datetime тип? C#, похоже, не имеет smalldatetime Тип, который я могу использовать. Любое понимание будет оценено!

6 ответов

Решение

Вам нужно обернуть дату в строковый литерал SQL, используя одинарные кавычки...

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";

Или используйте параметры..

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@myDate)";
cmd.Parameters.Add(new SqlParameter("@myDate", theDate));

Попробуйте поместить одинарные кавычки вокруг даты в строке...

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";

Работая с типом DateTime и несколькими другими в базе данных, настоятельно рекомендуется использовать @Parameters и все преобразования, если вам нужно, например: часовой пояс, форматирование или что-либо еще на стороне клиента.

Кроме того, потому что, как вы упоминали в своем посте, столбец имеет тип smalldatetime, а не string.

Короче попробуйте использовать @Parameters и, скорее всего, у вас все получится.

С уважением.

Начать с размещения одинарных кавычек вокруг даты.

например

('"+ TheDate+')";

этого обычно достаточно для ISO. Возможно, вам придется взглянуть на функции конвертера.

Будьте осторожны, откуда берется информация для даты. Если это происходит из редактируемого поля (и т. Д.), То это кандидат для атак с использованием SQL-инъекций.

Однако, если вы преобразуете в dateTime, а затем вставляете в строку SQL, разве это не уровень кодирования?

Я бы рекомендовал использовать именованные параметры:

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@MYDATE)";
SqlCommand myCommand = new SqlCommand(testCommand,conn);
myCommand.Parameters.Add(new SqlParameter("@MYDATE", SqlDbType.DateTime)).Value = theDate;
myCommand.ExecuteNonQuery();
Другие вопросы по тегам