0

アクセス データベースで空のレコードをチェックしようとしていますが、使用しているコードが機能すると考えました。データベースにそのテーブルのレコードがない場合、メッセージボックスが表示されます。ただし、コードを実行しても何も表示されません。IsDBNull を正しい方法で使用していますか、それともより良い方法がありますか。& 参照の代わりに params を使用することに慣れてきており、これはテスト後に変更する必要があります。どうもありがとう。

Dim con1 As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\domain\test.accdb")    
Dim sql As String
            sql = "SELECT * FROM Departments where Customer = '" & customer & "'"
            If IsDBNull(sql) Then
                MessageBox.Show("No record") <---THIS NOT FIRING
                ' This is our DataAdapter. This executes our SQL Statement above against the Database
                ' we defined in the Connection String
            Else
                Dim adapter As New OleDbDataAdapter(sql, con1)
                ' Gets the records from the table and fills our adapter with those.
                Dim dt As New DataTable("Departments")
                adapter.Fill(dt)
                ' Assigns our DataSource on the DataGridView
                dgv1.DataSource = dt
                '
                Dim sql1 As String
                sql1 = "SELECT * FROM Departments"
                Dim adapter1 As New OleDbDataAdapter(sql1, con1)
                Dim cmd1 As New OleDbCommand(sql1, con1)
                'Dim dt1 As New DataTable("Departments")
                con1.Open()
                Dim myreader As OleDbDataReader = cmd1.ExecuteReader
                myreader.Read()

                con1.Close()
            End If
4

2 に答える 2

2

はい、あなたはIsDBNull完全に間違っています。そのメソッドのドキュメントには次のように記載されています。

式が System.DBNull クラスに評価されるかどうかを示すブール値を返します。

sqlメソッドに送信している変数は、自分で他の値に設定しただけなので、IsDBNull明らかに評価されません。System.DBNull

SQL を実行した後に、結果の特定のフィールドが NULL かどうかを確認するために使用IsDBNullします。必要なことを行うには、 を呼び出した後、データ テーブルに行があるかどうかを確認するだけですFill

Dim dt As New DataTable("Departments")
adapter.Fill(dt)
If dt.Rows.Count = 0 Then MessageBox.Show("No record")
于 2013-10-25T07:48:54.647 に答える
1

IsDbNull はデータベースを呼び出しません。パラメータが DbNull.Value と等しいかどうかをテストするだけです。これは、文字列で呼び出す場合には当てはまりません。

あなたはこれを試すことができます

Dim con1 As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\domain\test.accdb")
Dim sql As String
sql = "SELECT COUNT(*) FROM Departments where Customer = '" & customer & "'"
con1.Open()
Dim cmd1 As New OleDbCommand(sql, con1)
If cmd1.ExecuteScalar() = 0 Then
  MessageBox.Show("No record")
Else
  Dim adapter As New OleDbDataAdapter(sql, con1)
  ' Gets the records from the table and fills our adapter with those.
  Dim dt As New DataTable("Departments")
  adapter.Fill(dt)
  ' Assigns our DataSource on the DataGridView
  dgv1.DataSource = dt
  '
  Dim sql1 As String
  sql1 = "SELECT * FROM Departments"
  Dim adapter1 As New OleDbDataAdapter(sql1, con1)
  cmd1 = New OleDbCommand(sql1, con1)
  'Dim dt1 As New DataTable("Departments")
  Dim myreader As OleDbDataReader = cmd1.ExecuteReader
  myreader.Read()

  con1.Close()
End If
于 2013-10-25T07:47:40.067 に答える