从SQL Server数据库插入并选择日期

时间:2011-03-16 14:48:57

标签: c# asp.net windows database sql-server-2000

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

  

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

是否有任何完美的解决方案可以从与操作系统无关的sqlserver数据库中插入和选择日期。即适用于意大利语和英语操作系统。

2 个答案:

答案 0 :(得分:2)

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

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

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的信息,例如Entity Framework或NHibernate。

答案 1 :(得分:2)

如果您不能使用存储过程或参数化查询,则可能需要以yyyy-mm-dd格式格式化日期。防爆。 '2011-03-16'

T-SQL SAMPLE

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

SELECT * FROM MyTable WHERE SomeDate <= '2011-03-16'

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