English 中文(简体)
Linq-to-SQL和日期
原标题:Linq-to-SQL and DateTime weirdness

我们的行为与

我们的申请是在几个客户地点安装的,大部分工作只是罚款。 Linq-to-SQL的一个询问更新了一张表格,并确定了一个新数值的<编码>Datetime栏。

In all the cases - including our development and test systems - this Linq-to-SQL statement gets translated into something along the lines of:

UPDATE dbo.OurTable 
SET WorkTimeStamp = @WTS 
WHERE ID = @ID

@WTS =  2011-11-04 14:15:25 , @ID = 555

然而,在一个客户网站,由于我们不明白(yet)的原因,这一更新已转化为:

UPDATE dbo.OurTable 
SET WorkTimeStamp = @WTS 
WHERE ID = @ID

@WTS =  Nov  4 2011 02:15:25PM , @ID = 555

http://en.wikipedia.org/wiki/Microsoft_SQL_Server#SQL_Server_2005”rel=“nofollow” 联合国

现在,该客户服务器(网站服务器和服务器)安装了美国-英国的Windows服务器2008年版;LQ服务器的语文定在us_english,日期格式定在mdy上,更新的用户账户有其语文组在“English/code>服务器......”上,在其他地方(例如,在我们的测试服务器基础设施上)安装。

因此,我的问题是:

  1. www.un.org/Depts/DGACM/index_spanish.htm 为什么在地球上,Linq-to-SQL突然造成同一个<代码>Date

  2. 因此,可以提出ADO。 NET和服务器 2005 SP2数据库处理 UPDATE statement disabilities? 我们重犯了我们的错误,其内容如下:

SqlTypeException - SqlDatetime overflow. 页: 1 页: 1

这似乎是一种“网络”错误(超过“Kingk”服务器错误),似乎因为某种原因,“NET”不能真正解释“Nov 4 2011 02:15:25PM<>/code”为有效“<代码>Datetime。 在试图在SQL管理 服务器上操作该错误时,我们似乎不能“执行”——UPDATE>/code>。

<>Update: 某些进一步调查似乎表明Linq-to-SQL在2005年或2008年使用服务器时的行为不同。

  • with SQL Server 2005, our dates get turned into: Nov 4 2011 02:15:25PM
  • with SQL Server 2008, our dates get turned into: 2011-11-04 02:15:25PM
最佳回答

我认为,你可能会cha弄错误的问题。

我将首先检查:

  1. Your LINQ to SQL schema/database model is accurate.
  2. Your problem logic to make sure there is no way the new DateTime value can be out of range. In particular, check that it can not be either DateTime.MinValue or DateTime.MaxValue.
  3. That you aren t doing any string to date parsing in your application.
  4. That the SQL Server does not have any triggers (particularly instead of triggers, which might be modifying the update statement).

我猜想你(或你的客户)从获得SqlTypeException——SqlDatetime超支开始。 页: 1 页: 1 错误信息,在调查你时,你注意到显示日期的不同。

你不提信息来自何处,因此,我假定情况像Kumr。

然而,显示日期的问题可能是一个重复的问题,因为它不应成为一个问题。

2005年,我们的日期改为:2011年5月4日,第02:15:25

我们的日期改为:2011-11-04 02:15:25

I m not sure exactly what you mean by that. SQL does not turn dates into string as it does not store dates as strings, but the internal representation is a number (something like the number of days since 1st Jan 1900).

如果你说你的日期是,显示,即2011年5月4日<02:15:25PM”,那么,这取决于显示信息的方案。

而且,据我所知,如果你正在使用时间参数(如果数据库模型准确无误,该参数即为LQ),那么从客户向LQ服务器发送的信息是“日期”的“Kalk”数字代表。 这应避免在客户和服务器之间出现任何时间转换问题。 举例来说,当你看一下Kall Profiler时,这并不显示这个日期的多少代表,对大多数人来说,这个代表很少,而是试图发挥帮助作用,并显示其价值。

重要的一点是,如果Kall或Kall的简介员能够显示2011年4月5日20时15分的定时参数,那么它知道它是一个有效的日期,确切知道日期是什么。

因此,我怀疑显示格式问题可能无关紧要。

那么,这便使人怀疑,为什么你的客户正在获得SqlTypeException-SqlDatetime过错电。

第一项工作是检查你确定的日期价值,这需要在申请一级进行,而不是在服务器服务器上进行,因为它不会达到这一目的。 (这是我为什么不认为这是一个结构组合问题的另一个原因)。)

似乎就是如此。 NET不能真正解释第2号2011年2月4日:15:25PM作为有效日期,出于某种原因

我看不到。 Parse的指令,如果是,那么问题与LINQ或L。

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!