вставить дату в SQL - PullRequest
       2

вставить дату в SQL

0 голосов
/ 30 декабря 2010

Я пытаюсь вставить дату в таблицу SQL, но при запуске программы выдает следующую ошибку.

Ошибка преобразования при преобразовании даты и / или времени из символьной строки.

string dateReleased = DateReleasedDate.Value.ToString("YYYY-MM-DD");

string myQuery = "INSERT INTO GameTbl (gameName, genreID, players, online, dateReleased, dateAdded, developerID, publisherID, consoleID) VALUES('" 
                + GameNameTxt.Text + "', '" + GenreCombo.SelectedValue + "', '" + PlayersNUD.Value + "', '" + OnlineCombo.SelectedText + "', '"
                + dateReleased  + "', 'GETDATE()', '" + DeveloperCombo.SelectedValue + "', '" 
                + PublisherCombo.SelectedValue + "','" + ConsoleCombo.SelectedValue + "')";

Ответы [ 4 ]

5 голосов
/ 30 декабря 2010

Пожалуйста, используйте параметризованные запросы.Мои глаза болят, когда я вижу конкатенации строк, используемые для построения SQL-запросов:

using (var conn = new SqlConnection("SOME CONNECTION STRING"))
using (var cmd = new SqlCommand(conn))
{
    conn.Open();
    cmd.CommandText = "INSERT INTO GameTbl (gameName, genreID, players, online, dateReleased, developerID, publisherID, consoleID) VALUES (@gameName, @genreID, @players, @online, @dateReleased, @developerID, @publisherID, @consoleID)";
    cmd.Parameters.AddWithValue("@gameName", GameNameTxt.Text);
    cmd.Parameters.AddWithValue("@genreID", GenreCombo.SelectedValue);
    cmd.Parameters.AddWithValue("@players", PlayersNUD.Value);
    cmd.Parameters.AddWithValue("@online", OnlineCombo.SelectedText);
    cmd.Parameters.AddWithValue("@dateReleased", DateReleasedDate.Value);
    cmd.Parameters.AddWithValue("@developerID", DeveloperCombo.SelectedValue);
    cmd.Parameters.AddWithValue("@publisherID", PublisherCombo.SelectedValue);
    cmd.Parameters.AddWithValue("@consoleID", ConsoleCombo.SelectedValue);
    var result = cmd.ExecuteNonQuery();
    ...
}

Что касается столбца dateAdded, я бы просто удалил его из INSERT и добавил его значение по умолчанию непосредственно вБаза данных SQL.

Обратите внимание, как вы непосредственно передаете DateTime экземпляры, и вы оставляете ADO.NET обрабатывать форматы.В качестве бонуса ваш код защищен от SQL-инъекций.

1 голос
/ 30 декабря 2010
DateReleasedDate.Value.ToString("yyyy-MM-dd");
0 голосов
/ 01 мая 2012

Лучший способ передать дату в SQL из .net, IMO, это использовать функцию .ToOADate.

Функция передает числовое представление даты, которая будет работать в любой базе данных datetime \поле даты независимо от региональных настроек.

Некоторая информация для вас: ToOADate

0 голосов
/ 30 декабря 2010

Проблема в том, что вы помещаете GETDATE () в одинарные кавычки. Он пытается преобразовать строку 'GETDATE ()' в дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...