【问题标题】:The conversion of a varchar data type to a smalldatetime data type resulted in an out-of-range value将 varchar 数据类型转换为 smalldatetime 数据类型导致值超出范围
【发布时间】:2011-06-14 07:12:55
【问题描述】:

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

选择 time0_.[Date] 作为 Date2_8_, time0_.Hours 作为 Hours8_, time0_.AuthorizedDate 作为 Authoriz7_8_, time0_.AuthorizedBy 作为 Authoriz9_8_ from [Time] time0_ where (UserID='4')AND(Date='5/26 /2011 12:00:00 上午') 正在给我错误消息:

{“将 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 management studio 中运行,它将毫无问题地运行。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    <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 数据类型的转换 到日期时间数据类型导致 超出范围的值。

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

    【讨论】:

    • 我是这样写的,因为我使用脚本生成了表格
    • 这样写有什么区别?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2011-11-12
    • 2016-02-08
    相关资源
    最近更新 更多