代码之家  ›  专栏  ›  技术社区  ›  hud

正在获取数据表的DBnull异常

  •  0
  • hud  · 技术社区  · 1 年前

    我正在使用将excel中的值设置到其中一列 datatable 。在我的一列中,数据表为null。我收到以下错误:

    对象不能从dbnull强制转换为其他类型

    这是代码

    ObjChangrePrePostHoto.Latitude = Convert.ToDecimal(dtHotoData.Rows[j]["Current Latitude"]);
    

    完整代码如下

    for (int j = 0; j < dtHotoData.Rows.Count; j++)
    {
        ObjChangrePrePostHoto.ChangeRequestID = ChangeRequestID;
        ObjChangrePrePostHoto.SAPID = dtHotoData.Rows[j]["Current SAPID"].ToString();
        ObjChangrePrePostHoto.State = dtHotoData.Rows[j]["R4GSTATE_CODE"].ToString();
    
        //  ObjChangrePrePostHoto.CRNO = dtHotoData.Rows[j]["Description as per CR"].ToString();
        ObjChangrePrePostHoto.HotoStatus = dtHotoData.Rows[j]["UPDATED_STATUS"].ToString();
        ObjChangrePrePostHoto.CreatedBy = CurrentUserName;
        ObjChangrePrePostHoto.CreatedDate = DateTime.Now;
        ObjChangrePrePostHoto.IPNonIP = dtHotoData.Rows[j]["IP_NONIP_SITE"].ToString();
        ObjChangrePrePostHoto.SrNo = dtHotoData.Rows[j]["Sr No"].ToString();
        ObjChangrePrePostHoto.SiteType = dtHotoData.Rows[j]["Site Type"].ToString();
        ObjChangrePrePostHoto.CRCategory = dtHotoData.Rows[j]["CR Category"].ToString();
        ObjChangrePrePostHoto.Remarks = dtHotoData.Rows[j]["Remarks"].ToString();
        ObjChangrePrePostHoto.CRJustifications = dtHotoData.Rows[j]["CR Justifications"].ToString();
        ObjChangrePrePostHoto.Latitude = Convert.ToDecimal(dtHotoData.Rows[j]["Current Latitude"]);
        ObjChangrePrePostHoto.Latitude = Convert.ToDecimal(dtHotoData["ReleaseId"] != System.DBNull.Value ? Convert.ToDecimal(dtHotoData["ReleaseId"]) : 0;
        ObjChangrePrePostHoto.Longitude = Convert.ToDecimal(dtHotoData.Rows[j]["Current Longitude"]);
    
        if (ObjChangrePrePostHoto.Save())
        {
            ChangeRequestID = ObjChangrePrePostHoto.ChangeRequestID;
        }
        else
        {
            ClientScript.RegisterStartupScript(Page.GetType(), "erroralert", "alert('Could not save the data for Site Addition flow');", true);
            return false;
        }
    }
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Felipe Gabriel Souza Martins    1 年前

    您面临的错误是因为您试图将null值转换为十进制类型。当您尝试将dbnull强制转换为其他数据类型时,会引发“对象无法从dbnull转换为其他类型异常”。

    为了解决这个问题,可以在进行转换之前检查列值是否为DBNull。您可以使用Convert.IsDBNull()函数来执行此检查。如果该值为DBNull,则可以为Latitude属性指定默认值(例如0),或者根据应用程序的逻辑采取任何其他适当的操作。

    以下是如何进行此检查的示例:

    // ...
    
    object latitudeValue = dtHotoData.Rows[j]["Current Latitude"];
    if (latitudeValue != DBNull.Value)
    {
        ObjChangrePrePostHoto.Latitude = Convert.ToDecimal(latitudeValue);
    }
    else
    {
        // Null value, assign a default value
        ObjChangrePrePostHoto.Latitude = 0;
    }
    
    // ...
    

    在上面的示例中,我们首先将列值存储在latitudeValue变量中。然后我们检查这个值是否与DBNull.value不同。如果不同,我们可以将其转换为十进制。否则,我们假设该值为null,并将0分配给Latitude属性。

    在进行任何类型转换之前,请确保将此逻辑应用于可能包含null值的任何列。