Bir sqldatatime.minvalue öğesini bir datetime nesnesine dönüştüremiyorum. Nasıl sqtdatetime.minvalue datetime dönüşür?
Denedim: Açıkçası işe yaramadı YaniDatetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
.
Bir sqldatatime.minvalue öğesini bir datetime nesnesine dönüştüremiyorum. Nasıl sqtdatetime.minvalue datetime dönüşür?
Denedim: Açıkçası işe yaramadı YaniDatetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
.
Herhangi bir nedenle explicit conversion operator'u kullanmamak için? benim için çalışıyor
DateTime dt = (DateTime) SqlDateTime.MinValue;
:
using System;
using System.Data.SqlTypes;
class Test
{
static void Main()
{
DateTime dt = (DateTime) SqlDateTime.MinValue;
Console.WriteLine(dt);
}
}
Neden bu işe yarar ve Convert.ToDateTime() garip değil mi? – codecompleting
@codecompleting, "Convert.ToDateTime", "SqlDateTime" değerini desteklemek için düzgün bir aşırı yüklenmeye gereksinim duyar. 'Convert''ın tasarımcıları, 'SqlDateTime'ın tasarımcıları kesinlikle bunu dikkate almamış olmalıydı. –
Aldığınız yanıtlar, değeri dönüştürmenin iki farklı yolunu size göstermiştir. Biri, SqlDateTime
için DateTime
için tanımlanan bir açık dönüşüm kullanmaktır, diğeri ise DateTime
döndüren SqlDateTime
örneğindeki .Value
özelliğine erişmektir.
var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion
Dikkate değer değerlikler vardır. SqlDateTime
, SqlDateTime.Null
değeri aracılığıyla veritabanındaki boş değerler kavramını (DBNull, başka bir silinmiş yanıtla başvurulan) destekler. Bir "null" örneğindeki Value
özelliğine erişirseniz, SqlNullValueException
'a girersiniz. Öte yandan, DateTime'a açık bir dönüşüm {January 1, 1900 12:00:00 AM}
ile sonuçlanır. Bu sonuçların hiçbiri kodunuzda istenmeyebilir. Geçersiz bir varsayılan değerle veritabanında geçerli bir boş girdinin üzerine yazmak, çalışma zamanında bir istisna almak kadar kötü olabilir. Eğer veritabanında bir null sütun var ve SqlDateTime
ile çalışıyorsanız, açıkça test ve farklı SqlDateTime.Null
tedavi etmek gerekebilir ve o zaman başka değerler dönüştürmek için almak yaklaşımı hangi önemli olmayabilir Eğer
.
DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
date = null
else
date = theSqlDate.Value; // or (DateTime)theSqlDate;
Jon Skeet'den daha iyi bir cevaptan daha iyi olan nadir bir cevap. –
Bunun için teşekkürler. Kodunuz bana bir SQL iadesi okumada yardımcı oldu 'DateTime dateValue = Convert.ToDateTime (reader.GetValue (8));' –