0

我正在尝试检查访问数据库中的空记录,并认为我使用的代码可以工作。应该发生的是,如果数据库中没有该表的记录,则显示 msgbox。但是,当我运行代码时,什么都没有显示。我是以正确的方式使用 IsDBNull 还是有更好的方法。我开始掌握使用参数而不是 & 引用,这将在测试后更改。非常感谢。

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,因为您只是自己将其设置为其他值。

IsDBNull在执行 SQL 后使用,以检查结果中的特定字段是否为 NULL。要执行您想要的操作,您只需在调用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 回答