C # вставка даты и времени сбоя - PullRequest
2 голосов
/ 13 июля 2011

У меня есть база данных с таблицей с именем 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 ]

7 голосов
/ 13 июля 2011

Вам необходимо заключить дату в строковый литерал 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));
3 голосов
/ 13 июля 2011

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

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";
2 голосов
/ 13 июля 2011

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

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

Короче, попробуйте использовать @ Parameters и, скорее всего, выбудет успешным.

С уважением.

1 голос
/ 13 июля 2011

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

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();
1 голос
/ 13 июля 2011

начните с одинарных кавычек вокруг даты.

например.

( ' "+ theDate +"') ";

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

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

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

1 голос
/ 13 июля 2011
...