Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#对象不能从DBNull强制转换为其他类型_C#_Sql - Fatal编程技术网

C#对象不能从DBNull强制转换为其他类型

C#对象不能从DBNull强制转换为其他类型,c#,sql,C#,Sql,对象不能从DBNull强制转换为其他类型 我有一个抛出上述错误的函数。我正在处理数据库和C代码中的所有空值。 那么它从哪里得到这个错误呢 我可以在catch块中看到错误。但是我不明白下面create()中的哪一行出现了错误 private void btnsearch_Click(object sender, EventArgs e) { try { dt.Rows.Clear(); SqlConne

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

我有一个抛出上述错误的函数。我正在处理数据库和C代码中的所有空值。 那么它从哪里得到这个错误呢

我可以在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值。由于您正在使用null检查它,但是
dr[“GZA”]
不会为null,因此您需要使用
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);
    }
}
对于转换为十进制:

spinHOInvAmt.Value = Convert.ToDecimal(dr["HOInvAmount"] == DBNull.Value ? 0 : dr["HOInvAmount"]);

您可以在一行中使用此选项:

int salary = reader["SALARY"] as int? ?? 0;

dr["Actual_salary"] = salary  - ((salary/30) * GZA);

您可以为DBNull结果输入0或任何值。

请尝试
int GZA=dr[“GZA”]==DBNull.value.Equals(dr[“GZA”])?0:Convert.ToInt32(dr[“GZA]”)
你的意思是不是说
DBNull
而不是
DB.Null
?@Tim是的,我错过了。:)我可以知道投票失败的原因吗?这可能对我有帮助:)唉,所以不要对否决票实施评论/理由政策。我希望是这样,因为有时被否决的人可以从中了解原因。
int salary = reader["SALARY"] as int? ?? 0;

dr["Actual_salary"] = salary  - ((salary/30) * GZA);