sql >> データベース >  >> RDS >> Sqlserver

SQL Server2008DATE列値に関する流暢なNHibernateの問題

    申し訳ありませんが、コメントするだけでなく、質問への回答としてこれを投稿する必要があることに気づきました...「新しい男」を笑わないでください

    さらなる議論とテストを通じて、この問題はADO.NETとNHibernateによるデータ型DATEのMSSQL2008列のDbType.Dateの使用に関連しているようです。コードがDbType.Dateの代わりにSqlDbType.Dateを使用している場合、そのような問題は発生せず、すべてが指定どおりに実行されます。

    DbType.Dateの使用は、他のデータベースタイプに対してより「移植可能」に見えるかもしれませんが、ADO.NET DbType.Dateには最小値1/1/1753の制限があるため、この問題が発生します。

    この問題の回避策は、列のタイプがDATETIME2であることをNHibernateに通知することです。これは、1753年1月1日より前の日付値もサポートします。 NHibernateマッピングが次の場合:

    <property name="TestDate" type="datetime2">
      <column name="TestDate" sql-type="date" />
    </property>
    

    コードは例外なく期待どおりに機能します。

    NHibernateがMsSql2008方言を使用していることを認識せず、DbTypesではなくSqlDbTypesを使用しているのは残念ですが、この回避策は今のところ機能しているようです。

    ADO.NETの側面の詳細については、ADO.NETがSQLServer2008の日付列に最小値を挿入するとクラッシュします 。これを手伝ってくれた@GrahamBunceに感謝します。

    この情報が、将来この問題に遭遇した人の助けになることを願っています。



    1. 機能は存在しませんが、本当に存在すると思います

    2. SQL Server Manager Studio(SSMS)のインストール方法-SQL Server/TSQLチュートリアルパート1

    3. PHP PDO MySQL IN(?、?、?

    4. MySQL MATCHは2文字では機能しませんか?