2016-08-05 120 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

相关问题