C# 插入、选择并更新日期时间

C# 插入、选择并更新日期时间,c#,sql,sql-server,tsql,ado.net,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+ "+"'"; 我用这个查询在两个日期之间进行选择

我有一个包含时间的表,列名为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'
消息范围错误是:“字符串或二进制数据将被截断。
语句已终止。“

您应该不要像这样将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

这适用于SQL Server的任何版本,并与任何日期格式、语言和区域设置一起使用。

如果表确实是一个日期,则最好执行以下操作:

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
}
类似地,在查询表时,类似于:

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
}

您应该遵循marc_的建议,参数化SQL命令。我可能错了,但您的SQL看起来无效。值周围没有任何括号。你需要。。。值(“+”数据+“+”)”;
名称
数据
的值是什么,数据库中的
名称
数据
的定义是什么?另外,
data
对于数据库列来说是一个非常糟糕的名称。@youarebeenbannedagain:什么错误????我看不到您的屏幕,也看不懂您的心思……“名称'SqlDbType'在当前上下文中不存在”,而YourDataValueHere就是这个?string data=DateTime.Now.ToShortDateString()@你需要一个
使用System.Data代码文件开头的行您能帮我更新吗?让我来改变这个问题。@youarebeenbannedagain:对于
更新
场景:(1)使用
cmd.Parameters.Add(“@name”,SqlDbType.VarChar,100)。Value=nome;(2) 错误表明,您传递的
nome
很可能太长(比表中定义的列长)