簡體   English   中英

object 無法從 dbnull 轉換為其他類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM