嗨我尝试插入DB日期时间,列是日期类型我需要做什么?这是代码
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();
Run Code Online (Sandbox Code Playgroud)
我建议不要使用应用程序服务器的时间将值插入数据库.可能出错的最基本示例是您可以将两台服务器设置为使用相同数据库的不同时区.什么服务器的时间是正确的时间?
另一件事是当您使用内联SQL语句时,必须将datetime转换为字符串.如果应用程序服务器和数据库服务器设置为不同的文化,则需要非常小心,如果要插入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();
Run Code Online (Sandbox Code Playgroud)
不要将值直接包含在SQL中.
请改用参数化查询.当数据库完全能够接受带DateTime参数的预准备语句时,没有必要弄乱字符串格式.
你应该养成为所有值使用查询参数的习惯,这些值不能简单地硬编码到SQL中.例如,您的查询目前只是轻松地获取内容TextBox1.Text并将其插入SQL.这是SQL注入攻击的一个秘诀.
您应该将代码(SQL)与数据(值)分开.参数化查询是这样做的方法.
编辑:当然,如果你很高兴使用数据库的"现在"的想法而不是你的客户的"现在"的想法,在SQL中使用内置函数是好的.找出更适合您情况的方法.