我正在使用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;
}
}
型
1条答案
按热度按时间iovurdzv1#
您面临的错误是因为您试图将空值转换为十进制类型。当您尝试将DBNull强制转换为另一个数据类型时,会引发“object-cannot-be-converted-from-dbnull-to-other-types异常”。
要解决此问题,可以在执行转换之前检查列值是否为DBNull。可以使用Convert.IsDBNull()函数来执行此检查。如果该值为DBNull,则可以为Latitude属性指定默认值(例如,0),或根据应用程序的逻辑采取任何其他适当的操作。
以下是如何执行此检查的示例:
字符串
在上面的示例中,我们首先将列值存储在latitudeValue变量中。然后我们检查该值是否与DBNull. Value不同。如果不同,我们可以将其转换为十进制。否则,我们假设该值为空,并将0分配给Latitude属性。
在执行任何类型转换之前,请确保将此逻辑应用于任何可能包含空值的列。