C# 插入并选择SQL Server数据库中的日期

C# 插入并选择SQL Server数据库中的日期,c#,asp.net,windows,database,sql-server-2000,C#,Asp.net,Windows,Database,Sql Server 2000,当尝试从SQL Server中选择数据或使用C windows应用程序在中插入数据时,我遇到以下异常。我在单引号中传递select查询where子句中的日期,如“2011年3月16日”所示。异常消息如下所示: 将char数据类型转换为 日期时间数据类型导致 日期时间值超出范围 对于从sqlserver数据库中插入和选择与操作系统无关的日期,是否有完美的解决方案。i、 e.可在意大利语和英语操作系统上使用。使用存储过程或参数化查询。这些将允许您传入一个C datetime对象,转换将自动为您处理

当尝试从SQL Server中选择数据或使用C windows应用程序在中插入数据时,我遇到以下异常。我在单引号中传递select查询where子句中的日期,如“2011年3月16日”所示。异常消息如下所示:

将char数据类型转换为 日期时间数据类型导致 日期时间值超出范围


对于从sqlserver数据库中插入和选择与操作系统无关的日期,是否有完美的解决方案。i、 e.可在意大利语和英语操作系统上使用。

使用存储过程或参数化查询。这些将允许您传入一个C datetime对象,转换将自动为您处理

我建议从课堂开始。一个简单的例子是:

using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM MyTable WHERE myDate = @myDate", someSqlConnection)
{
    da.SelectCommand.Paramaters.Add("@myDate", new DateTime());
    DataTable dt = new DataTable();
    da.Fill(dt);
}

然而,要知道有很多不同的方法可以实现你的目标。根据您的问题,我可以想象您正在创建SQL字符串并对数据库执行它们。这被认为是一种不好的做法,原因很多,包括你所描述的原因。阅读有关ORM(例如实体框架或NHibernate)的信息

如果无法使用存储过程或参数化查询,则可能需要将日期设置为yyyy-mm-dd格式。例如“2011-03-16”

T-SQL示例

INSERT INTO MyTable (SomeDate) VALUES ('2011-03-16') 


此外,请记住日期的时间部分。如果时间不重要,那么请确保不要存储它,因为它可能会影响以后的SELECT查询。

我同意您的方法。至少,应该使用参数化查询。至少这有助于防止SQL注入。我将始终使用ISO-8601格式YYYYMMDD-无论您的语言和区域设置如何,该格式都有效!因此,请尝试20110316,而不是2011年3月16日。作为一名开发人员,我应该使用RTFM。Justin是正确的,如果您不能使用参数化查询,这是一种方法。但是,SqlDataAdapter从.NET 1.1开始就存在,因此您不应该没有理由不使用它!!
SELECT * FROM MyTable WHERE SomeDate <= '2011-03-16'