2016-08-05 293 views
0

助けてください!タイプ "DBNull"からタイプ 'string'への変換は無効です。エラー

それは私はクリスタルレポートを介してプリントボタンをクリックすると、正常に動作しますが、私は戻って私の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

関連する問題