Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Masalah NHibernate Lancar dengan Nilai Kolom TANGGAL SQL Server 2008

Maaf, baru sadar saya harus memposting ini sebagai jawaban atas pertanyaan alih-alih hanya berkomentar... Tolong jangan menertawakan "orang baru!"

Melalui diskusi dan pengujian lebih lanjut, tampaknya masalah ini terkait dengan penggunaan ADO.NET dan NHibernate dari kolom DbType.Date untuk MS SQL 2008 dari tipe data DATE. Jika kode menggunakan SqlDbType.Date alih-alih DbType.Date, tidak ada masalah seperti itu yang akan terjadi dan semuanya akan berjalan seperti yang ditentukan.

Sementara penggunaan DbType.Date mungkin tampak lebih "portabel" untuk tipe database lain, hal itu menimbulkan masalah ini, karena ADO.NET DbType.Date memiliki batasan nilai minimum 1/1/1753.

Solusi untuk masalah ini adalah memberi tahu NHibernate bahwa tipe kolom adalah DATETIME2, yang juga mendukung nilai tanggal lebih awal dari 1/1/1753. Jika pemetaan NHibernate adalah:

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

Kode berfungsi seperti yang diharapkan tanpa pengecualian.

Sayang sekali NHibernate tidak mengenalinya menggunakan dialek MsSql2008 dan menggunakan SqlDbTypes daripada DbTypes, tetapi solusi ini tampaknya berhasil untuk saat ini.

Untuk informasi lebih lanjut tentang aspek ADO.NET, lihat ADO.NET Masukkan Nilai Min ke SQL Server 2008 kolom Tanggal lumpuh . Terima kasih kepada @Graham Bunce atas bantuannya dalam hal ini.

Saya harap informasi ini membantu siapa saja yang mengalami masalah ini di masa depan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nvarchar(maks) vs NText

  2. Cara MEMILIH DARI prosedur tersimpan

  3. Cara menggunakan SqlTransaction di C#

  4. Fungsi Seperti KUALIFIKASI di SQL Server

  5. SQL DELETE dengan INNER JOIN