2016-08-05 92 views
0

請幫助!從「DBNull」類型到「字符串」類型的轉換無效錯誤

,當我通過水晶報告點擊打印按鈕,但是當我關閉報表回到我的datagridview的錯誤彈出從類型「DBNull的」關於 轉換到類型「串」這是工作的罰款無效

這裏是我的代碼,我可以檢索從我的數據庫中的數據,以我的datagridview

DataGridView1.Rows.Clear() 
    sql = "SELECT * FROM tblfsesmis" 
    cmd = New MySqlCommand(sql, con) 

    Try 
     con.Open() 
     adapter = New MySqlDataAdapter(cmd) 

     adapter.Fill(dt) 

     For Each row In dt.Rows 
      Populate(row(0), row(1), row(2), row(3), row(4), row(5), row(6), row(7), row(8), row(9), row(10), row(11)) 
     Next 
     con.Close() 

     dt.Rows.Clear() 
     DataGridView1.Refresh() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
     con.Close() 
    End Try 
+0

當你關閉窗口時會怎樣? – Codexer

+0

我在搜索表單中搜索並單擊打印按鈕。 !但是我可以查看或點擊打印按鈕並關閉報告表單後!搜索表單將加載所有字段,但如果再次單擊任何按鈕或打印按鈕,它將顯示錯誤 – LecheDeCrema

+0

您的搜索表單代碼在哪裏,並且您是否設置了斷點來逐步執行? – Codexer

回答

0

也許你需要的是在發送這些別的地方之前檢查DBNull值:

If IsDBNull(row(x)) Then 
    value = "" 
Else 
    value = row(x) 
End If 

此外,要使用Using塊的連接,因爲在這裏你只要有異常關閉它(這意味着你真的不相信自己......)

下面是一個例子(我不知道你是如何創建你的連接的):

DataGridView1.Rows.Clear() 
sql = "SELECT * FROM tblfsesmis" 

Try 
    Using con As New SQLConnection() 
     con.Open() 
     cmd = New MySqlCommand(sql, con) 
     adapter = New MySqlDataAdapter(cmd) 

     adapter.Fill(dt) 

     For Each row In dt.Rows 
      'It's in your Populate function that you want to check the DBNull values 
      Populate(row(0), row(1), row(2), row(3), row(4), row(5), row(6), row(7), row(8), row(9), row(10), row(11)) 
     Next 

     dt.Rows.Clear() 
     DataGridView1.Refresh() 
    End Using 'con Object will be disposed automatically 
Catch ex As Exception 
    MsgBox(ex.Message) 
End Try 
+0

我會在哪裏把IsDBNull?它可能是什麼聲明?價值和行? – LecheDeCrema

相關問題