我有一个项目,由几个客户端使用,但其中一个使用SQL Server 2005无论任何代码运行一个SQL语句,其中包括像这样的日期:与日期字符串和SQL Server 2005的ASP.Net SQL字符串
" AND ABS.AbsenceDate = '" + DateTime.Now.ToString("yyyy-MM-dd") + "'";
我得到错误:varchar数据类型为datetime数据类型的转换导致超出范围的值
这仅发生于这一个客户机/服务器,如果我复制实际的sql字符串创建并在Sql Server中执行它在此服务器上运行正常。我创建了一个测试页面来确保日期字符串是正确的,并且确实按预期显示为2013-11-26。我的假设是,该应用程序发送的日期为2013-26-11,因为这会导致该问题,但随后测试表明否则会让我难倒。
有关信息,这是英文服务器上,以便在区域设置日/月/年和日期存储为年 - 月 - 日等
值不是来自文本框或任何人可以进入。我在地方使用EF的ExecuteStoreQuery,因此无法使用参数。 – user1166905
@ user1166905:我不熟悉它,但这个答案表明你可以:http://stackoverflow.com/questions/13035353/using-sql-server-named-parameters-with-executestorequery-and-executestorecommand除了认为今天用户不能改变它,但也许明天。另外,正如我所提到的,参数不仅可以防止sql注入,还可以解决其他问题,而且它们也更加高效(查询不会一直改变,系统可能会重新使用它)。 –
那么,如果EF不能做到这一点,它会很糟糕,我会说,这仅仅是我不会使用它的原因。 –