我有一个时间表,列名为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+ "+"'";
我使用该查询在两个日期之间进行选择
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();
消息错误是:&#34;字符串或二进制数据将被截断。 该声明已被终止。&#34;
答案 0 :(得分:4)
你应该像你一样从不将SQL命令连接在一起!这打开了SQL注入攻击。
相反 - 使用参数!这也消除了很多转换问题。
所以在你的情况下,你应该使用:
string comando = "INSERT INTO example (date) VALUES (@DateParam)";
然后您需要在@DateParam
上设置SqlCommand
:
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以及任何日期格式,语言和区域设置。
答案 1 :(得分:1)
如果表格真的是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
}