Mengingat sifat tipe data tanggal / waktu itu tidak dapat berisi null
nilai, yaitu perlu mengandung nilai, itu tidak boleh kosong atau tidak mengandung apa pun. Jika Anda menandai variabel tanggal / waktu nullable
maka Anda hanya dapat menetapkan nilai nol untuknya. Jadi yang ingin Anda lakukan adalah salah satu dari dua hal (mungkin ada lebih banyak tetapi saya hanya bisa memikirkan dua):
Tetapkan nilai tanggal / waktu minimum untuk variabel Anda jika Anda tidak memiliki nilai untuk itu. Anda dapat menetapkan nilai tanggal / waktu maksimum juga - mana yang cocok untuk Anda. Pastikan bahwa Anda konsisten di seluruh situs saat memeriksa nilai tanggal / waktu Anda. Putuskan untuk menggunakan min
atau max
dan tetap menggunakannya.
Tandai variabel tanggal / waktu Anda sebagai nullable
. Dengan cara ini Anda dapat mengatur variabel tanggal / waktu null
Anda jika Anda tidak memiliki variabel untuk itu.
Biarkan saya menunjukkan poin pertama saya menggunakan contoh. The DateTime
jenis variabel tidak dapat diatur untuk null, perlu nilai, dalam hal ini saya akan set ke DateTime
's nilai minimum jika tidak ada nilai.
Skenario saya adalah saya memiliki BlogPost
kelas. Ini memiliki banyak bidang / properti yang berbeda tetapi saya memilih hanya menggunakan dua untuk contoh ini. DatePublished
adalah ketika posting dipublikasikan ke situs web dan harus mengandung nilai tanggal / waktu. DateModified
adalah ketika sebuah posting diubah, sehingga tidak harus mengandung nilai, tetapi dapat mengandung nilai.
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
Menggunakan ADO.NET
untuk mendapatkan data dari database (menetapkan DateTime.MinValue
apakah tidak ada nilai):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Anda dapat mencapai poin kedua saya dengan menandai DateModified
bidang sebagai nullable
. Sekarang Anda dapat mengaturnya null
jika tidak ada nilai untuk itu:
public DateTime? DateModified { get; set; }
Menggunakan ADO.NET
untuk mendapatkan data dari database, itu akan terlihat sedikit berbeda dengan cara itu dilakukan di atas ( null
bukan penugasan DateTime.MinValue
):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
Saya harap ini membantu menjernihkan kebingungan. Mengingat bahwa tanggapan saya sekitar 8 tahun kemudian, Anda mungkin seorang programmer C # yang ahli sekarang :)