2013-09-29 80 views
2

對象不能從DBNull轉換爲其他類型。C#對象不能從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; 
+0

嘗試'INT GZA =博士[ 「GZA」] == DBNull.Value.Equals(DR [ 「GZA」])? 0:Convert.ToInt32(dr [「GZA」]);' – Tim

回答

4

在將其轉換爲其他類型之前,您需要檢查您的列是否具有空值。當你與檢查,但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); 
    } 
} 
+0

你是不是指'DBNull'而不是'DB.Null'? – Tim

+0

@Tim是的,我錯過了。 :) – Sachin

+0

我可以知道downvote的原因嗎?這可能對我有幫助:) – Sachin

0
private static string MyToString(object o) 
    { 
     if (o == DBNull.Value || o == null) 
      return ""; 

     return o.ToString(); 
    } 

轉換爲十進制:

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

您可以在一條生產線上使用它:

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

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

你可以把0或任何價值的DBNull的結果。

相關問題