Do tính chất của kiểu dữ liệu ngày / giờ, nó không thể chứa một null
giá 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à nullable
chỉ 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 min
hoặc max
và 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 null
nế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 DateTime
kiể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 BlogPost
lớ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. DatePublished
là khi bài đăng được xuất bản lên trang web và phải chứa giá trị ngày / giờ. DateModified
là 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.MinValue
là 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 DateModified
trường là nullable
. Bây giờ bạn có thể đặt nó thành null
nế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 null
thay 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 :)