为什么GETDATE()在SSMS与C#Microsoft.Practices.EnterpriseLibrary.Data上运行时产生不同的结果?

问题描述:

当在SSMS(SQL Server Management Studio)中的查询编辑器上执行时,为什么GETDATE()会产生不同的结果,而与Microsoft.Practices.EnterpriseLibrary.DataDatabase.ExecuteNonQuery()函数执行的结果有什么不同?为什么GETDATE()在SSMS与C#Microsoft.Practices.EnterpriseLibrary.Data上运行时产生不同的结果?

此GETDATE()位于更新表中日期的存储过程中。


调试由我们开发商SSMS:

 

    EXEC [dbo].[SP_NameOfTheSPWithGetDate]() 

= 2016年11月4日下午7时43



正通过运行最终用户的ASP.net网页:

Database SampleDB; 
SampleDB.ExecuteNonQuery('[dbo].[SP_NameOfTheSPWithGetDate]'); 

= 2016年11月4日上午11点43


我怀疑的差异可能是因为+8GMT的偏移量(我们的服务器在GMT + 8)他们运行相同的确切的SP,但为什么从GETDATE()不同的结果?

我们尝试了各种功能,以获得当前的日期,如:

  • GETUTCDATE()
  • CURRENT_TIMESTAMP
  • GETDATE()
  • GETSYSTEMDATE()

但我们仍然有同样的结果。

这个问题很奇怪,因为我没有将任何值传递给可能影响GETDATE()函数的SP。

如果您需要更多信息,请随时询问以帮助解决此问题。

附加信息(更新):

  • 的一个托管ASP.Net网页服务器与SQL Server数据库不同。
+0

可能是用户浏览器修正日期时间而不是发生在您的后端? – user1666620

+0

我不这么认为,调用SP的人是后端C#。 – jestrange

+0

检查这个问题,尤其是(非常长)的接受答案,也许它可以摆脱一些光:http://stackoverflow.com/q/2783348/1220550 –

也许尝试SYSDATETIMEOFFSET()

所以,你可以检查不同的时区导致的问题 - 如果是:

完整的解决方案/所有学分:Getdate() function to get date for my timezone

由于这两个将在SQL执行服务器,结果将是相同的,但第二个将根据.Net当前的文化和数据格式返回和处理,在您的情况看起来不同。

如果你设置你的.NET应用程序到别的东西,为前文化:AR-SA,它会显示在回历格式的数据,这将是完全不同的东西:)