0

I am trying to check for empty records in an access db and thought that the code I am using would work. What is supposed to happen, is if there are no records for that table in the db, then the msgbox is displayed. However, nothing is displaying when I run the code. Am I using IsDBNull the correct way or is there a better way to do it. I am getting to grips with using params instead of & references and this shall be changed after testing. Many thanks.

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
user1532468
  • 1,723
  • 8
  • 41
  • 80

2 Answers2

2

Yes, you are using IsDBNull completely wrong. The documentation for that method states:

Returns a Boolean value that indicates whether an expression evaluates to the System.DBNull class.

The sql variable you're sending into the IsDBNull method clearly does not evaluate to System.DBNull, as you just set it to some other value yourself.

You use IsDBNull after you've executed your SQL, to check to see if a specific field in your result was NULL. To do what you want, you'll just want to check if the data table has any rows it in after you call Fill.

Dim dt As New DataTable("Departments")
adapter.Fill(dt)
If dt.Rows.Count = 0 Then MessageBox.Show("No record")
Michael Edenfield
  • 28,070
  • 4
  • 86
  • 117
1

IsDbNull will not call your database. It just tests if the parameter is equal to DbNull.Value which will never be the case if you call it with a string.

you could try this

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
schudel
  • 1,235
  • 2
  • 11
  • 18