您好我尝试插入DB日期时间,而Column是日期类型我需要做什么? 这是代码
string query = "INSERT INTO Feedback (user_Name, date_of_, Praise) VALUES ('"+TextBox1.Text+"',"+DateTime.Now+",'"+TextBox2.Text+"')";
SqlCommand cmd = new SqlCommand(query, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
答案 0 :(得分:6)
我建议不要使用应用程序服务器的时间将值插入数据库。可能出错的最基本示例是您可以将两台服务器设置为使用相同数据库的不同时区。什么服务器的时间是正确的时间?
当您使用内联SQL语句时,其他事情是将日期时间转换为字符串。如果应用程序服务器和数据库服务器设置为不同的文化,则需要非常小心,如果要插入2月5日(02.05),则不要插入5月2日(02.05)。
当然,所有这些问题都是可以避免的,但是当RDBMS可以为我们完成所有这些时,为什么还要烦恼呢?
顺便说一句,即使您不想使用存储过程,也要使用参数 此代码应重新格式化为:
string query = "INSERT INTO Feedback (user_Name, date_of_, Praise) VALUES (@username, getdate(), @praise)";
SqlCommand cmd = new SqlCommand(query, con);
SqlParameter param = new SqlParameter("@username", SqlDbType.Text);
param.Value = text1;
cmd.Parameters.Add(param);
param = new SqlParameter("@praise", SqlDbType.Text);
param.Value = text2;
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
答案 1 :(得分:5)
不要将值直接包含在SQL 中。
使用参数化查询。当数据库完全能够接受带有DateTime
参数的预准备语句时,没有必要搞乱字符串格式。
你应该养成使用所有值的查询参数的习惯,这些值不能简单地硬编码到SQL中。例如,您的查询目前只是轻松地获取TextBox1.Text
的内容并将其插入到SQL中。这是SQL注入攻击的一个秘诀。
您应该将代码(SQL)与数据(值)分开。参数化查询是这样做的方式。
编辑:在SQL中使用内置函数很好,当然,如果您乐意使用数据库的“现在”的想法而不是客户的“现在”的想法。找出更适合你情况的工作。答案 2 :(得分:2)
为什么不在数据库中使用TIMESTAMP列?通过代码插入它似乎就像开销一样。
以下链接提供了更多信息:
击><击> http://msdn.microsoft.com/en-us/library/aa260631(SQL.80).aspx 击>
编辑:将数据库列的默认值设置为CURRENT_TIMESTAMP (Transact-SQL),并将列名保留在insert语句之外。数据库将自动插入当前日期和时间。转换不再有问题!
答案 3 :(得分:1)
将DateTime.Now
替换为DateTime.Now.ToString("yyyy-MM-dd");
此外,你应该真正参数化你的插入语句,这样你就不会成为SQL injection攻击的受害者。
答案 4 :(得分:1)
在大多数SQL实现中都有一个NOW()函数。
答案 5 :(得分:0)
您必须将DateTime转换为Sql DateTime文字。最简单的方法是:
DateTime.Now.ToString(System.Globalisation.CultureInfo.InvariantCulture)
然而,特别是对于DateTime.Now,您可以使用一些Sql函数,例如GetDate()
,但这通常取决于您的数据库服务器。
答案 6 :(得分:0)
您可以使用Date
属性:
DataTime.Now.Date