插入,选择和更新DateTime

时间:2014-10-28 21:18:27

标签: c# sql sql-server tsql ado.net

我有一个时间表,列名为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;

2 个答案:

答案 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
}