将日期插入SQL

时间:2010-12-30 14:11:03

标签: c# .net sql tsql ado.net

我正在尝试在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 个答案:

答案 0 :(得分:5)

请使用参数化查询。当我看到用于构造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 :(得分:1)

DateReleasedDate.Value.ToString("yyyy-MM-dd");

答案 2 :(得分:0)

问题是你把GETDATE()放到单引号中。它试图将字符串'GETDATE()'转换为日期。

答案 3 :(得分:0)

从.net,IMO将日期传递给SQL的最佳方法是使用.ToOADate函数。

该函数传递的日期数字表示将适用于任何数据库datetime \ date字段,无论区域设置如何。

您的一些信息:ToOADate