2009-03-17 15 views
26

Tôi đã nhận được điều này trong một Statment INSERT để MSSQL 2008datetime2 là gì?

System.Data.SqlClient.SqlException: Việc chuyển đổi dữ liệu datetime2 loại đến một kiểu dữ liệu datetime dẫn trong một out-of- giá trị dải ô.

+5

Sự cố xảy ra khi khung thực thể được sử dụng để INSERT một System.DateTime vào DB SQL2008 của tôi. Tôi đã thay đổi datatype trong DB datetime2 và bây giờ tất cả mọi thứ chạy trơn tru. – Glenn

+5

Sự cố xảy ra với lỗi logic và DateTime chưa bao giờ được khởi tạo tức là tôi đã cố gắng chèn 0001-01-01 00: 00: 00.0000000 – Glenn

+4

Điều này đã cho tôi khi tôi không khởi tạo DateTime trong EF4 vì tôi đã có một giá trị mặc định của GetDate() trong cơ sở dữ liệu. – Will

Trả lời

16

Xác định ngày được kết hợp với thời gian trong ngày dựa trên đồng hồ 24 giờ. datetime2 có thể được coi là phần mở rộng của loại ngày giờ hiện tại có phạm vi ngày lớn hơn, độ chính xác phân đoạn mặc định lớn hơn và độ chính xác do người dùng chỉ định tùy chọn.

http://technet.microsoft.com/en-us/library/bb677335.aspx

2

Từ technet:

Định nghĩa một ngày mà được kết hợp với thời gian của ngày hôm đó được dựa trên đồng hồ 24 giờ. datetime2 có thể được coi là phần mở rộng của loại ngày giờ hiện tại có phạm vi ngày lớn hơn, độ chính xác phân đoạn mặc định lớn hơn và độ chính xác do người dùng chỉ định tùy chọn.

Tôi phải kiểm tra vì tôi nghĩ datetime2 có mối quan hệ với varchar2. Rõ ràng, không có mối quan hệ nào cả.

Đặt mã của bạn để chúng tôi có thể đoán được nguyên nhân gây ra sự cố.

20

Kiểu dữ liệu datetime của SQLServer là phạm vi giá trị được phép nhỏ hơn nhiều so với kiểu dữ liệu datetime của .net. Kiểu datetime của SQLServer về cơ bản hỗ trợ lịch gregorian, vì vậy giá trị nhỏ nhất bạn có thể có là 1/1/1753. Trong năm 2008 SQLServer đã thêm một datatype datetime2 hỗ trợ trở lại năm 1 (không có năm 0). Có vẻ như bạn đang cố chèn giá trị ngày giờ trước ngày 1/1/1753 vào một ngày giờ (không phải datetime2) Cột SQLServer

+1

Cảm ơn! Thông tin tuyệt vời! –

+1

Đã bỏ phiếu cho việc trả lời những gì người dùng thực sự cần biết thay vì câu hỏi theo nghĩa đen :) –

+0

+1 câu trả lời tuyệt vời, cảm ơn bạn – Dal

1

Có thể bảng cơ sở dữ liệu của bạn có cột "DATETIME" hoặc "SMALLDATETIME" và bạn đang cố gắng chèn ngày ngoài phạm vi ?? DATETIME bao gồm 1753-1-1 đến 9999-12-31, trong khi SMALLDATETIME chỉ bao gồm 1900-1-1 đến 2079-6-6.

Loại dữ liệu SQL Server 2008 DATETIME2 mới sẽ bao gồm 0001-1-1 đến 9999-12-31.

Marc

0

tôi đã nhận lỗi này khi cột cơ sở dữ liệu của tôi đã được tạo ra như là NOT NULL và tôi đặc biệt chỉ định một Nullable = true vào DateTime tài sản của tôi trong khuôn khổ EntityType ADO.Entity tôi.

Để khắc phục sự cố, tôi làm cho thuộc tính Nullable = (None)

Các vấn đề liên quan