我正在尝试在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 + "')";
答案 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