2012-02-01 34 views
11

Tôi đã có đối tượng ngày giờ không có giá trị trong C#.Ngày giờ dễ vỡ và Cơ sở dữ liệu

DateTime? StartDate = new DateTime(); 

sau đó tôi kiểm tra một người sử dụng gửi giá trị để xác định xem một ngày áp dụng đối với hồ sơ này:

if (Complete == "N/A") 
{ 
    StartDate = null; 
} 

Bây giờ tôi đến truy vấn của tôi mà có thể hoặc không thể được chèn một datetime null:

using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = StartDate; 
} 

Như bạn có thể mong đợi nếu ngày bắt đầu bằng không thì tôi gặp lỗi là loại không chính xác. Cách tốt nhất để tiến hành từ đây là gì?

Tôi đã xem xét việc kiểm tra ngày bắt đầu là không có nhưng tôi không chắc chắn cách thực hiện điều đó khi loại không thể thực hiện được.

+1

Là một sang một bên, bạn có thể dễ dàng kiểm tra xem một loại nullable là null theo hai cách. 1) '! StartDate.HasValue', hoặc 2) Đơn giản chỉ cần' StartDate == null' – Ray

Trả lời

18

này sẽ vượt qua một giá trị NULL cơ sở dữ liệu như các tham số nếu StartDate là null:

using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = (object)StartDate ?? DBNull.Value; 
} 
+0

Đây là những gì tôi đã cố gắng, không biết cú pháp viết tắt này mặc dù! :) – deed02392

+0

Lỗi với quá trình này: Toán tử '??' không thể áp dụng cho các toán hạng kiểu system.datetime? và system.dbnull. – deed02392

+0

@ deed02392 cố định với một dàn diễn viên đơn giản để đối tượng –

1
using (SqlCommand command = new SqlCommand(updateSql, db)) 
{ 
    if (StartDate.HasValue()) 
     command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
      = StartDate; 
    else 
     command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
      = DBNull.Value; 
} 
Các vấn đề liên quan