C# 日期-时间-现在格式

C# 日期-时间-现在格式,c#,sql,C#,Sql,嗨,我尝试插入到数据库日期时间和列是日期类型我需要做什么? 这是密码 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.

嗨,我尝试插入到数据库日期时间和列是日期类型我需要做什么? 这是密码

  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();
将DateTime.Now替换为DateTime.Now.ToStringyyyy-MM-dd


另外,您应该真正地参数化insert语句,这样您就不会成为攻击的受害者。

大多数SQL实现中都有NOW函数。

您必须将日期时间转换为SQL日期时间文字。最简单的方法是:

DateTime.Now.ToString(System.Globalisation.CultureInfo.InvariantCulture)
但是,特别是对于DateTime。现在,您可以使用一些Sql函数,例如GetDate,但这通常取决于您的数据库服务器。

为什么不在数据库中使用时间戳列?通过在代码中插入它似乎会增加开销

以下链接提供了更多信息:

编辑:将数据库列的默认值设置为,并在insert语句中保留列名。当前日期和时间将由数据库自动插入。转换再也没有问题了

您可以使用日期属性:

DataTime.Now.Date
不要在SQL中直接包含该值

改用参数化查询。当数据库完全能够接受带有DateTime参数的准备好的语句时,就没有必要乱动字符串格式

您应该养成对所有不能简单地硬编码到SQL中的值使用查询参数的习惯。例如,您的查询当前只是轻松地获取TextBox1.Text的内容并将其插入SQL。这是SQL注入攻击的秘诀

您应该将SQL代码与数据和值分开。参数化查询是实现这一点的方法


编辑:如果您愿意使用数据库的“现在”概念而不是客户机的“现在”概念,那么在SQL中使用内置函数当然可以。找出哪个更适合您的情况。

我建议不要使用应用程序服务器的时间将值插入数据库。最基本的例子是,可能出现错误的是,可能有两台服务器设置为不同的时区,使用相同的数据库。服务器的时间是什么时候

另一件事是,在使用内联SQL语句时,需要将datetime转换为字符串。如果应用程序服务器和数据库服务器设置为不同的区域性,则在插入02.05年2月5日时,需要格外小心,不要插入05年5月2日

当然,所有这些问题都是可以避免的,但既然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(); 

使用SqlParameters,而不是简单的文本哇,您的代码完全可能受到SQL注入攻击。。!这两个文本框将使任何黑客能够完全分析您的web应用程序并破坏您的数据库。改用参数化查询!时间戳是一个行版本控制戳-在SQL Server中与日期和时间无关!你说得对,我把MySQL搞混了!不过,我所追求的想法仍然有效。既然DBMS也知道确切的时间,为什么还要插入“现在通过”代码呢?如果他们不进行更新,这是个好主意。但是,如果更新包括输入日期时间,那么这应该是可行的。查询明确地说:INSERT,所以这只是假设。我编辑了我的文章。如果SQL Server-它是getdate或CURRENT\u,那么参数化查询比正确设置日期格式要好得多。OP根本不应该将数据包含在SQL语句中。@linepogl-我从问题中了解到,他希望将日期而不是时间放入数据库。我当然可能弄错了,但无论如何,这应该很容易改变。无论如何,他应该参数化查询,使他的应用程序更加健壮,正如Jon Skeet在回答和评论中提到的那样。是的,也许你是对的。但那他为什么使用DateTime。现在,而不是DateTime。今天?@linepogl-老实说,他似乎不确定他应该使用什么,所以我尽可能地扣除;当然,我可能也错了。