• ベストアンサー

DBNULLについて

課題でVBからデータベースの操作についてのプログラムを作成しているのですが、どうしてもエラーが出るのでお願いします。 フォームロード時に下の処理をしているのですが、 Dim sql As String Dim cm As OleDb.OleDbCommand Dim rd As OleDb.OleDbDataReader sql = "select max(番号) as 数 from アドレス帳" Try cm = New OleDb.OleDbCommand(sql, cn) rd = cm.ExecuteReader Catch ex As Exception MessageBox.Show(ex.Message, "Access Error", MessageBoxButtons.OK, MessageBoxIcon.Error) rd.Close() Exit Sub End Try If rd.Read Then frmMenu.num = rd.Item("数") frmMenu.num += 1 End If frmMenu.num += 1 txtnum.Text = frmMenu.nu この部分なんですが、 If rd.Read Then frmMenu.num = rd.Item("数") frmMenu.num += 1 End If frmMenu.num += 1 txtnum.Text = frmMenu.nu ・frmMenu.num はInteger型の変数です。初期値に0が入っています。 この部分では、データが読めた場合はデータベースの方から 数を引っ張ってきて、+1をして、読めない(データがない) 場合には+1だけをしたいのですが、データがある時は正常に 動くのですが、データがない時に動かそうとすると、 型 'DBNull' から型 'Integer' への変換は無効です のエラーがでて困っています。 これは、読めたか読めなかったか判定出来ていないということなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

rd.Item("数")が Nullだからでしょうね If rd.Read andalso Not IsDBNull(rd.Item("数")) Then でどうでしょうか。

fon4203
質問者

お礼

できました。 ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • rancyan
  • ベストアンサー率0% (0/2)
回答No.2

NULLの場合を考慮して下記SQLでは? SELECT CASE WHEN MAX(番号) IS NULL THEN 1 ELSE MAX(番号) + 1 END AS 数 FROM アドレス帳

fon4203
質問者

お礼

SQLはあんまり詳しくやっていないのですが、 こうするやり方もあるんですね ありがとうございます

すると、全ての回答が全文表示されます。

関連するQ&A