C# 对象无法从 DBNull 转换为其他类型

use*_*526 3 c# sql

对象不能从 DBNull 转换为其他类型。

\n\n

我有一个引发上述错误的以下函数。我正在处理数据库和 C# 代码中的所有空值。\n那么它在哪里收到此错误?

\n\n

我可以在 catch 块中看到错误。但我不明白以下 create() 中的哪一行出现错误。

\n\n
    private void btnsearch_Click(object sender, EventArgs e)\n    {\n        try\n        {\n            dt.Rows.Clear();\n            SqlConnection CN = new SqlConnection(mysql.CON.ConnectionString);\n                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\'\xd8\xa7\xd9\x84\xd8\xb5\xd9\x86\xd8\xaf\xd9\x88\xd9\x82\' 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);\n                sda.Fill(dt);\n            }\n            ////////////\n            dt.Columns.Add("Actual_salary", typeof(string));\n\n            foreach (DataRow dr in dt.Rows)\n            {\n                int GZA = dr["GZA"] == null ? 0 : Convert.ToInt32(dr["GZA"]);\n                dr["Actual_salary"] = Convert.ToInt32(dr["SALARY"]) - ((Convert.ToInt32(dr["SALARY"]) / 30) * GZA);\n\n            }\n            dataGridViewX1.DataSource = dt;\n
Run Code Online (Sandbox Code Playgroud)\n

Sac*_*hin 6

在将列转换为其他类型之前,您需要检查列是否具有空值。由于您正在使用null检查它,但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);
    }
}
Run Code Online (Sandbox Code Playgroud)