问题遇到的现象和发生背景
在更新datatable时使用Getchange方法时用update更新表,为什么显示Object cannot be cast from DBNull to other types
问题相关代码,请勿粘贴截图
private void tsbSave_Click(object sender, EventArgs e)
{
DataTable changeDt=dtml.GetChanges();
foreach (DataRow dr in changeDt.Rows)
{
string strSQL = string.Empty;
if (dr.RowState == System.Data.DataRowState.Added)
{
strSQL = @"INSERT INTO [dbo].[MaterialInfo]
([material_cd]datatable
,[material_nm]
,[material_class]
,[material_unit]
,[material_price]
,[budget_price])
VALUES
('" + dr["material_cd"].ToString() + @"'
,'" + dr["material_nm"].ToString() + @"'
,'" + dr["material_class"].ToString() + @"'
,'" + dr["material_unit"].ToString() + @"'
," + Convert.ToDecimal(dr["material_price"]) + @"
," + Convert.ToDecimal(dr["budget_price"]) + @")";
}
else if (dr.RowState == System.Data.DataRowState.Deleted)
{
strSQL = @"DELETE FROM [dbo].[MaterialInfo]
WHERE material_cd= '" + dr["material_cd", DataRowVersion.Original].ToString() + @"'";
}
else if (dr.RowState == System.Data.DataRowState.Modified)
{
if (dr["material_unit"]!= DBNull.Value)
{
strSQL = @"UPDATE[dbo].[MaterialInfo]
SET [material_nm] = '" + dr["material_nm"].ToString() + @"'
,[material_class] ='" + dr["material_class"].ToString() + @"'
,[material_unit] ='" + dr["material_unit"].ToString() + @"'
,[material_price] =" + Convert.ToDecimal( dr["material_price"]) + @"
,[budget_price] =" + Convert.ToDecimal(dr["budget_price"]) + @"
WHERE material_cd = '" + dr["material_cd"].ToString() + @"'";
}
}
SqlCommand comm = new SqlCommand(strSQL, connml);
comm.ExecuteNonQuery();
}
}
运行结果及报错内容
报错:Object cannot be cast from DBNull to other types
我的解答思路和尝试过的方法
好像是deimial不能转化,但不知道该怎么改