ASP.NET将不一致的日期时间格式传递给SQL Server

ASP.NET将不一致的日期时间格式传递给SQL Server,asp.net,sql,datetime,Asp.net,Sql,Datetime,我知道这是一个由来已久的问题,但我对它并不陌生,我还没有找到一个迄今为止对我有帮助的答案 我有一个ASP.NET站点,它显示来自SQLServer2005数据库的数据。页面顶部是“日期开始”和“日期结束”文本框,用于过滤下面显示的数据 数据使用SqlDataSource显示,这两个日期作为参数传递给存储过程。文本框显示日期并接受英国日期格式(dd/MM/yyyy)的输入,工作正常 现在,我添加了一个完全相同设置的新页面,显示的数据略有不同。在后端,我通过复制和粘贴我的原始存储过程创建了一个新的存

我知道这是一个由来已久的问题,但我对它并不陌生,我还没有找到一个迄今为止对我有帮助的答案

我有一个ASP.NET站点,它显示来自SQLServer2005数据库的数据。页面顶部是“日期开始”和“日期结束”文本框,用于过滤下面显示的数据

数据使用SqlDataSource显示,这两个日期作为参数传递给存储过程。文本框显示日期并接受英国日期格式(dd/MM/yyyy)的输入,工作正常

现在,我添加了一个完全相同设置的新页面,显示的数据略有不同。在后端,我通过复制和粘贴我的原始存储过程创建了一个新的存储过程,它几乎完全相同。但在这一页上,我的日期出现了错误,因为它们被读取为MM/dd/yyyy,这意味着今天的日期,例如2011年8月15日,被传递为2011年8月15日,并且不是有效日期

我已经检查了所有内容,我不明白为什么这应该在一个页面上工作,而不是在另一个页面上,特别是当我基本上只是复制了所有原始代码并对其进行了轻微调整时。有人能给我提些我可能没想到的建议吗?

  • 文本框是字符串,位于从浏览器(langauges)设置的本地线程中

  • 首先使用本地感知转换将它们转换为DateTime对象,然后将DateTime对象写入服务器。永远不要(!)处理sql server中的字符串,除非将它们格式化为独立于ISO的格式(2011-08-17 23:52:11)


但一般来说,ASp.NET会在浏览器的本地语言中显示日期、时间和数字。要么关掉它,要么处理它。这对用户来说很好。所以,检查区域设置-用户、服务器进程。线程的当前区域设置是什么?

您需要在存储过程中使用SQL convert,如:

convert(varchar, @yourdateParameter, 103) for format dd/mm/yyyy


希望这能有所帮助。

我可能刚刚更接近问题的原因。在我的工作页面上,数据显示在GridView中。在页面上,它不在报告(RDLC)中。因此,我在页面中添加了一个GridView,它不工作,并且显示了正确的数据。因此,不知怎的,问题出在这份报告上。报表上没有任何参数或任何日期/时间字段,它应该只显示数据源中指定的数据,这是正确的,因为它在GridView中显示了正确的数据!?我已经尝试过了,尽管我不必在sp中这样做,但这并没有任何区别。根据我上面的评论,似乎正在检索正确的数据,只是报表试图显示与数据源返回的数据不同的数据。问题肯定出在本地报表(RDLC)上。尽管我的SQLDataSource工作正常,GridView很高兴地填充了数据,并通过我传递给存储过程的日期参数进行了过滤,但RDLC自己却在检查日期参数,而且它似乎不够聪明,无法确定它们的格式与它所期望的格式不同。这太令人恼火了——这份报告根本不应该关心日期。报告上没有日期,没有任何参数,日期与报告无关!过滤在数据源中完成。
convert(varchar, @yourdateParameter, 101) for format mm/dd/yyyy