asp.net 获取数据表的DBnull异常

vbopmzt1  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(166)

我正在使用datatable将excel中的值设置为其中一列。在我的一个专栏中,datatable为null。我得到这个错误:
object-cannot-be-cast-from-dbnull-to-other-types
下面是代码

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;
    }
}

iovurdzv

iovurdzv1#

您面临的错误是因为您试图将空值转换为十进制类型。当您尝试将DBNull强制转换为另一个数据类型时,会引发“object-cannot-be-converted-from-dbnull-to-other-types异常”。
要解决此问题,可以在执行转换之前检查列值是否为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不同。如果不同,我们可以将其转换为十进制。否则,我们假设该值为空,并将0分配给Latitude属性。
在执行任何类型转换之前,请确保将此逻辑应用于任何可能包含空值的列。

相关问题