无法将对象从DBNull强制转换为其他类型。
我有以下引发上述错误的函数。我正在处理数据库和C#代码中的所有null。那么在哪里得到这个错误呢?
我可以在catch块中看到错误。但是我不明白下面的create()中的哪一行得到了错误。
private void btnsearch_Click(object sender, EventArgs e) { try { dt.Rows.Clear(); SqlConnection CN = new SqlConnection(mysql.CON.ConnectionString); SqlDataAdapter sda = new SqlDataAdapter("select EMP_EMPLOYEES.NAME,EMP_EMPLOYEES.JOBNAME,EMP_EMPLOYEES.FIA,EMP_EMPLOYEES.DRAGA,EMP_EMPLOYEES.SALARY ,EMP_HASM_DET.GZA,EMP_EMPLOYEES.NAQLBADAL,EMP_EMPLOYEES.JOBBADALAT ,BLADIAINFO.MA3ESHA ,EMP_EMPLOYEES.DISSENT ,EMP_EMPLOYEES.SANDOK as'丕賱氐賳丿賵賯' from BLADIAINFO ,EMP_EMPLOYEES left join EMP_HASM_DET on EMP_HASM_DET.EMPID = EMP_EMPLOYEES.ID left join EMP_MOKHALFAT_DET on EMP_MOKHALFAT_DET.EMPID = EMP_EMPLOYEES.ID left join EMP_MOKHALFAT on EMP_MOKHALFAT.ID=EMP_MOKHALFAT_DET.MOKHALFAID left join EMP_HASMIAT on EMP_HASMIAT.ID=EMP_HASM_DET.HASMID and EMP_EMPLOYEES.EMPTYPE = '" + cmbEMPTYPE.SelectedItem.ToString() + "' ", CN); sda.Fill(dt); } //////////// dt.Columns.Add("Actual_salary", typeof(string)); foreach (DataRow dr in dt.Rows) { int GZA = dr["GZA"] == null ? 0 : Convert.ToInt32(dr["GZA"]); dr["Actual_salary"] = Convert.ToInt32(dr["SALARY"]) - ((Convert.ToInt32(dr["SALARY"]) / 30) * GZA); } dataGridViewX1.DataSource = dt;
您需要先检查您的列是否具有空值,然后再将其强制转换为另一种类型。当您使用 null 进行检查时,但dr["GZA"]不会为null,因此您需要使用DBNull.Value
dr["GZA"]
DBNull.Value
试试这个
foreach (DataRow dr in dt.Rows) { int GZA = (dr["GZA"] == DBNull.Value) ? 0 : Convert.ToInt32(dr["GZA"]); if (dr["SALARY"] != DBNull.Value) { dr["Actual_salary"] = Convert.ToInt32(dr["SALARY"]) - ((Convert.ToInt32(dr["SALARY"]) / 30) * GZA); } }