A DateTime
trong C # là một kiểu giá trị, không phải là một kiểu tham chiếu, và do đó không thể rỗng. Tuy nhiên, nó có thể là hằng số DateTime.MinValue
nằm ngoài phạm vi của DATETIME
kiểu dữ liệu Máy chủ Sql .
Các kiểu giá trị được đảm bảo luôn có giá trị (mặc định) (bằng 0) mà không cần phải luôn đặt rõ ràng (trong trường hợp này là DateTime.MinValue).
Kết luận là bạn có thể có một giá trị DateTime chưa được đặt mà bạn đang cố gắng chuyển vào cơ sở dữ liệu.
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999,
exactly one 100-nanosecond tick
before 00:00:00, January 1, 10000
MSDN: DateTime.MinValue
Về máy chủ Sql
datetime
Dữ liệu ngày và giờ từ ngày 1 tháng 1 năm 1753 đến ngày 31 tháng 12 năm 9999, với độ chính xác đến một phần trăm giây (tương đương 3,33 mili giây hoặc 0,00333 giây). Giá trị được làm tròn đến gia số .000, .003 hoặc .007 giây
smalldatetime
Dữ liệu ngày và giờ từ ngày 1 tháng 1 năm 1900 đến ngày 6 tháng 6 năm 2079, với độ chính xác đến từng phút. giá trị smalldatetime với 29,998 giây hoặc thấp hơn được làm tròn xuống đến phút gần nhất; các giá trị có 29,999 giây hoặc cao hơn được làm tròn đến phút gần nhất.
MSDN: Sql Server DateTime và SmallDateTime
Cuối cùng, nếu bạn thấy mình đang chuyển C # DateTime
dưới dạng chuỗi sang sql, bạn cần định dạng nó như sau để giữ lại độ chính xác tối đa và ngăn máy chủ sql gặp lỗi tương tự.
string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Cập nhật (8 năm sau)
Cân nhắc sử dụng loại DateTime2
dữ liệu sql phù hợp hơn với .net DateTime
với phạm vi ngày 0001-01-01 through 9999-12-31
và phạm vi thời gian00:00:00 through 23:59:59.9999999
string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2 (Giao dịch-SQL)