[英]object cannot be cast from dbnull change to other types
我的代碼有一個錯誤,當我開始測試我的 web api 時,它顯示 object 不能從 dbnull 轉換為其他類型,我在 sql 服務器數據庫中勾選了 null 框。 我不想更改數據庫中的任何內容。 Mobile 和 datetime 列是 sql 服務器中的 null。 我用 asp.net web api 2 來做這個項目。
我的問題:如何在不對數據庫做任何操作的情況下解決錯誤?
這是我的代碼:
public IHttpActionResult Get()
{
List<TestClass> draft = new List<TestClass>();
string mainconn = ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
SqlConnection sqlconn = new SqlConnection(mainconn);
string sqlquery = "Select * From tblTest";
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand(sqlquery, sqlconn);
SqlDataReader sdr = sqlcomm.ExecuteReader();
while (sdr.Read())
{
draft.Add(new TestClass()
{
UserId = Convert.ToInt32(sdr.GetValue(0)),
Name = sdr.GetValue(1).ToString(),
Mobile = sdr.GetValue(2).ToString(),
Access = Convert.ToInt32(sdr.GetValue(3)),
Date= Convert.ToDateTime(sdr.GetValue(4))
});
}
return Ok(draft);
}
我的數據庫在下面:
UserId Name Mobile Access Date
11 John NULL 2 2012-01-02 00:00:00.000
24 Fred 34786584 5 NULL
56 Emily 18375555 0 2014-03-04 00:00:00.000
76 Lydia NULL 4 2015-09-08 00:00:00.000
87 Anna 12313147 5 2020-11-21 00:00:00.000
90 Mimi 27184641 1 NULL
您正在嘗試將 null 值轉換為 DateTime ,這會導致錯誤。 通過添加一個? 在 DateTime 屬性之后簽名。
通過 DateTime.TryParseExact 檢查
DateTime.TryParseExact("YOURVALUE","yyyyMMdd",CultureInfo.InvariantCulture,DateTimeStyles.None, out resultvalue)?resultvalue.toString():"";
您可以使用IsDBNull進行檢查:
Date = sdr.IsDBNull(4) ? null : Convert.ToDateTime(sdr.GetValue(4))
如果 Date 列的類型為 'datetime' 或 'datetime2' 您可以使用GetDateTime :
Date = sdr.IsDBNull(4) ? null : sdr.GetDateTime(4)
這段代碼解決了
Date = (sdr.GetValue(4) != DBNull.Value) ? Convert.ToDateTime(sdr.GetValue(4)) : (DateTime?)null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.