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



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

选择time0_。[日期]为Date2_8_,time0_.小时为小时8_,time0_.AuthorizedDate为Authoriza7_8_,Time 0_AuthorizedBy为Authoriza9_8_ from[时间]time0_其中(用户ID='4')AND(日期='5/26/2011 12:00:00 AM')正在给我错误消息:

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

NHibernate的日期和授权日期:

<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),我的机器的DateTime也为英语(美国)。

我尝试过错误:将nvarchar数据类型转换为smalldatetime数据类型会导致值超出范围,将varchar数据类型转换成datetime数据类型会造成值超出范围。但没能解决我的问题。

有什么想法可能导致这个问题吗?

为什么用这种方式映射它?

你可以试着简单地绘制它:

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

同时尝试删除length="4"

更新

这里有一些文档:NHibernate 中的日期/时间支持

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

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

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

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

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

最新更新