将varchar数据类型转换为smalldatetime数据类型会导致超出范围的值

时间:2011-06-14 07:12:55

标签: asp.net nhibernate sql-server-2008

我正在使用sql server 2008,NHIbernate并运行这段代码

  

选择time0 _。[Date]作为Date2_8_,time0_.Hours作为Hours8_,time0_.AuthorizedDate作为Authoriz7_8_,time0_ .AuthorizedBy作为Authoriz9_8_来自[Time] time0_其中(UserID ='4')AND(Date ='5/26 / 2011 12:00:00 AM')   给我错误信息:

     

{“将varchar数据类型转换为smalldatetime数据类型会导致超出范围的值。”}

NHibernate for Date和AuthorizedDate:

<property name="Date" type="DateTime">
        <column name="`Date`" length="4" sql-type="smalldatetime" not-null="true"/>
    </property>
<property name="authorizedDate" type="DateTime" access="field">
        <column name="AuthorizedDate" length="4" sql-type="smalldatetime" not-null="false"/>
    </property>

但是,如果我从sql管理工作室获取sql并运行它,它将毫无问题地运行。

sql server的DateTime格式为英语(US),我的机器的日期时间格式也是英语(美国)。

我尝试过Error: The conversion of a nvarchar data type to a smalldatetime data type resulted in an out-of-range valueconversion of a varchar data type to a datetime data type resulted in an out-of-range value。但是无法解决我的问题。

可能导致此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

为什么要以这种方式映射它?

您可以尝试简单地映射它:

<property name="Date" not-null="true" />

还尝试删除length="4"

<强>更新

这里有一些文档:Date/Time Support in NHibernate

  

DbType.DateTime映射到日期时间   (或smalldatetime)SQL类型

所以我认为不需要在映射文件中指定它。

但是我认为这里的基本问题是日期格式。如果我在SSMS中使用'5/26/2011 12:00:00 AM'尝试本地查询,我的查询会正确返回,但如果我尝试'26 / 5/2011 12:00:00 AM'我收到错误:

  

varchar数据类型的转换   到日期时间数据类型导致了   超出范围的价值。

您是否尝试在应用程序中设置本地化?