vb.net IsDBNull if statement not displaying msgbox

末鹿安然 提交于 2020-01-06 08:20:28

问题


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

回答1:


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")



回答2:


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


来源:https://stackoverflow.com/questions/19583919/vb-net-isdbnull-if-statement-not-displaying-msgbox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!