참고 :이 하지입니다 내가 특별히 열 인덱스지정한 캐스트가 잘못되었습니다
을 사용하지 않도록 할뿐만 how-to-get-nullable-datetime-out-of-the-database의 중복 I 다음 개체
public class MyClass
{
public int ID { get; set; }
public DateTime? Deleted { get; set; }
}
에게 있습니다 삭제 날짜가 NUL은
MyClass c = new MyClass();
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = "MyConnectionString";
SqlCommand cmd = new SqlCommand("SELECT ID,Deleted FROM MyTable", conn);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr != null && sdr.HasRows)
{
while (sdr.Read())
{
c.CampID = (int)sdr["ID"];
c.Deleted = (DateTime?)sdr["Deleted"];
}
sdr.Close();
}
conn.Close();
}
return c;
경우
다음 코드는 데이터베이스에서 상기 물체를 추출 리터 나는
지정한 캐스트가 내가 잘못 뭐하는 거지
유효하지 않은 오류가? 이런 식으로 Nullable datetime 필드를 캐스팅 할 수 있습니까?
저는 두 가지 못생긴 해킹으로 작업이 완료됩니다. 이 :
try{
c.Deleted = (DateTime?)sdr["Deleted"];
}
catch{
// ignoring a catch makes me feel unclean
}
또는이
if(!string.isNullOrEmpty(sdr["Deleted"].ToString()))
{
// not quite so bad, but still not very elegant
c.Deleted = (DateTime?)sdr["Deleted"];
}
청소기가 있는가, 더 우아한 방법은이 작업을 수행하려면?
참고 :이
c.Deleted = sdr["Deleted"] == DBNull.Value ?
(DateTime?)null : Convert.ToDateTime(sdr["Deleted"]);
'에 대한 검사 DBNull.Value'는 그 자체로 충분하고 명확 합니다만, 값이 이미 있다면'Convert.ToDateTime'을 사용해야하는 이유는 무엇입니까? 'DateTime'으로 알려진가? 나는 그것이 틀렸다는 것을 말하는 것이 아니며,이 대답은 단순한 코드보다는 설명으로 이익을 얻을 수 있다고 말하고 있습니다. – hvd