Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sự cố thông thạo NHibernate với Giá trị cột DATE của SQL Server 2008

Xin lỗi, tôi chỉ nhận ra rằng tôi nên đăng bài này như một câu trả lời cho câu hỏi thay vì chỉ bình luận ... Xin đừng cười "anh chàng mới!"

Qua các cuộc thảo luận và kiểm tra thêm, có vẻ như vấn đề này liên quan đến việc ADO.NET và NHibernate sử dụng cột DbType.Date cho MS SQL 2008 của kiểu dữ liệu DATE. Nếu mã đang sử dụng SqlDbType.Date thay vì DbType.Date, sẽ không có vấn đề như vậy xảy ra và mọi thứ sẽ hoạt động như được chỉ định.

Mặc dù việc sử dụng DbType.Date có vẻ dễ "di động" hơn đối với các loại cơ sở dữ liệu khác, nhưng nó lại gây ra vấn đề này, vì ADO.NET DbType.Date có giới hạn giá trị tối thiểu là 1/1/1753.

Một giải pháp cho vấn đề này là cho NHibernate biết rằng loại cột là DATETIME2, cũng hỗ trợ các giá trị ngày sớm hơn 1/1/1753. Nếu ánh xạ NHibernate là:

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

Mã hoạt động như mong đợi mà không có ngoại lệ.

Quá tệ là NHibernate không nhận ra nó đang sử dụng phương ngữ MsSql2008 và sử dụng SqlDbTypes chứ không phải DbTypes, nhưng giải pháp này hiện có vẻ hoạt động.

Để biết thêm thông tin về các khía cạnh của ADO.NET, hãy xem ADO.NET Chèn Giá trị Tối thiểu vào SQL Server 2008 Cột ngày bị treo . Cảm ơn @Graham Bunce vì sự giúp đỡ của anh ấy.

Tôi hy vọng thông tin này sẽ hỗ trợ bất kỳ ai gặp phải vấn đề này trong tương lai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Máy chủ xử lý các yêu cầu dịch vụ web từ nhiều máy khách như thế nào

  2. Cách tính tuổi (theo năm) dựa trên Ngày sinh và getDate ()

  3. SQL Server:Lọc đầu ra của sp_who2

  4. Tại sao truy vấn được tham số hóa tạo ra kế hoạch truy vấn chậm hơn rất nhiều so với truy vấn không được tham số hóa

  5. Chuyển đổi ‘time’ thành ‘datetimeoffset’ trong SQL Server (Ví dụ T-SQL)