插入,选择和更新DateTime

我有一个时间表,列名为time,数据类型为Date

在asp.net中,我想要一个查询来插入日期,另一个在2日期之间选择。

我已经尝试过了:

 string data = DateTime.Now.ToShortDateString(); //date= 28/10/2014 -> dd/mm/yyyy string comando = "INSERT INTO example (date) values '" +data+ "+"'"; 

我使用该查询在2个日期之间进行选择

 select * from example where date >= '25/10/2014' and date <= '28/10/2014' 

我已经尝试使用数据类型varchar但它不起作用。 所以我正在尝试使用数据类型date

但是当我执行查询INSERT我收到一个错误

从字符串转换日期和/或时间时转换失败。

有人可以帮帮我吗? 我唯一的问题是将时间节省在表中。

如果可能,我想要日期格式: dd/mm/yyyy

更新:

我有更新行有日期(日期)和varchar(名称)的问题这是我的代码:

 string comando = "UPDATE example set name=@name WHERE data = @date"; SqlCommand cmd = new SqlCommand(comando, connect); cmd.Parameters.Add("@name", nome); cmd.Parameters.Add("@date", SqlDbType.Date).Value = data; cmd.ExecuteNonQuery(); 

消息错误是:“字符串或二进制数据将被截断。语句已被终止。”

你不应该像你一样将SQL命令连接在一起! 这打开了SQL注入攻击。

相反 – 使用参数! 这也解决了很多转换问题。

所以在你的情况下,你应该使用:

 string comando = "INSERT INTO example (date) VALUES (@DateParam)"; 

然后你需要在你的SqlCommand上设置@DateParam

 cmd.Parameters.Add("@DateParam", SqlDbType.Date).Value = YourDataValueHere 

这应该照顾你所有的问题!

如果要再次选择,请使用参数!

 select * from example where date >= @fromDate and date <= @toDate 

当你从C#运行它时。

如果您直接使用T-SQL(在Mgmt Studio中),则使用ISO-8601格式YYYYMMDD ,该格式独立于任何日期格式和/或语言设置 -

 select * from example where date >= '20141025' and date <= '20141028' 

这适用于任何版本的SQL Server以及任何 dateformat,语言和区域设置。

如果表格确实是DATE / DATETIME / DATETIME2 / SMALLDATETIME ,那么你最好做一些更像:

 using (SqlCommand cmd = new SqlCommand("INSERT INTO example (date) values (@param)")) { cmd.Paramters.Add("@param", SqlDbType.Datetime).Value = DateTime.Now; cmd.ExecuteNonQuery(); } 

同样,当您查询表时,更像是:

 using (SqlCommand cmd = new SqlCommand("SELECT * FROM example WHERE date BETWEEN @FromDate AND @ToDate")) { cmd.Paramters.Add("@FromDate", SqlDbType.Datetime).Value = DateTime.Now; cmd.Paramters.Add("@ToDate", SqlDbType.Datetime).Value = DateTime.Now; // Of course, you'd probably want to pass through values as parameters to your method // Fill your dataset/get your SqlDataReader, etc. as preferred }