Do tính chất của kiểu dữ liệu ngày / giờ, nó không thể chứa một nullgiá trị, tức là nó cần chứa một giá trị, nó không thể để trống hoặc không chứa gì. Nếu bạn đánh dấu một biến ngày / giờ là nullablechỉ thì bạn có thể gán giá trị null cho nó. Vì vậy, những gì bạn đang muốn làm là một trong hai điều (có thể có nhiều hơn nhưng tôi chỉ có thể nghĩ về hai):
Chỉ định giá trị ngày / thời gian tối thiểu cho biến của bạn nếu bạn không có giá trị cho biến đó. Bạn cũng có thể chỉ định giá trị ngày / thời gian tối đa - bất kỳ cách nào phù hợp với bạn. Chỉ cần đảm bảo rằng bạn có toàn bộ trang web nhất quán khi kiểm tra giá trị ngày / giờ của bạn. Quyết định sử dụng minhoặc maxvà gắn bó với nó.
Đánh dấu biến ngày / giờ của bạn là nullable. Bằng cách này, bạn có thể đặt biến ngày / giờ của mình thành nullnếu bạn không có biến đó.
Hãy để tôi chứng minh điểm đầu tiên của tôi bằng cách sử dụng một ví dụ. Các DateTimekiểu dữ liệu không thể được thiết lập để null, nó cần một giá trị, trong trường hợp này tôi sẽ đặt nó vàoDateTime 's giá trị nhỏ nhất nếu không có giá trị.
Kịch bản của tôi là tôi có một BlogPostlớp học. Nó có nhiều trường / thuộc tính khác nhau nhưng tôi chọn chỉ sử dụng hai cho ví dụ này. DatePublishedlà khi bài đăng được xuất bản lên trang web và phải chứa giá trị ngày / giờ. DateModifiedlà khi một bài viết được sửa đổi, vì vậy nó không phải chứa một giá trị, nhưng có thể chứa một giá trị.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Sử dụng ADO.NETđể lấy dữ liệu từ cơ sở dữ liệu (gán DateTime.MinValuelà không có giá trị):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Bạn có thể thực hiện điểm thứ hai của tôi bằng cách đánh dấu DateModifiedtrường là nullable. Bây giờ bạn có thể đặt nó thành nullnếu không có giá trị cho nó:
public DateTime? DateModified { get; set; }
Sử dụng ADO.NETđể lấy dữ liệu từ cơ sở dữ liệu, nó sẽ trông hơi khác so với cách thực hiện ở trên (gán nullthay vì DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Tôi hy vọng điều này sẽ giúp làm sáng tỏ bất kỳ sự nhầm lẫn. Cho rằng phản hồi của tôi là khoảng 8 năm sau, bây giờ bạn có thể là một lập trình viên C # chuyên nghiệp :)