gpt4 book ai didi

c# - C# 对象不能从 DBNull 转换为其他类型

转载 作者:行者123 更新时间:2023-12-05 01:21:34 29 4
gpt4 key购买 nike

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

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

我可以在 catch block 中看到错误。但我不明白以下 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

试试这个

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);
}
}

关于c# - C# 对象不能从 DBNull 转换为其他类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075574/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com