测试空单元格 Access DB VB.net?

Test for empty cell Access DB VB.net?

我想知道是否可以在尝试收集其值之前检查记录中的特定单元格是否为空,如果无法将其分配给变量则导致程序崩溃。

类似于 SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = "Smith" 的内容,并测试 FirstNameColumn 是否有值。

我正在使用 VB.net,以及 OleDB 和 Access 数据库。

如果您有一些检索记录的代码,并且行中的某些值可能为空:

Public Sub ReadMyData(ByVal connectionString As String)
    Dim queryString As String = "SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = 'Smith'"
    Using connection As New OleDbConnection(connectionString)
        Dim command As New OleDbCommand(queryString, connection)

        connection.Open()

        Dim reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()


            If Not reader.IsDbNull(0) Then 
               Console.WriteLine(reader.GetString(0))
            End If

        End While

        reader.Close()
    End Using
End Sub

DataReader 有一个 IsDBNull 方法,它会告诉您一行中的单元格是否为空。

尽管如此,使用 DataReader 确实是一种低级且相当艰苦的工作。有很多更简单的方法来使用数据库。下一步可能是数据适配器和数据表,提供类似的功能:

 Dim da as New OleDbDataAdapter("SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = 'Smith'", connStr)  
 DataTable dt = new DataTable()  
 custDA.Fill(dt)  

 For Each ro as DataRow in dt.Rows
   If Not ro.IsNull("FirstNameColumn") Then
     Console.WriteLine(ro("FirstNameColumn"))
   End If
 Next ro

TableAdapters 另一个抽象级别,消除了所有可怕的字符串列名称处理:

 Dim ta as New PersonTableAdapter
 Dim dt as PersonDataTable = ta.GetData()
 For Each ro in dt
   If Not ro.IsFirstNameColumnNull() Then
     Console.WriteLine(ro.FirstNameColumn)
   End If
 Next ro

Entity Framework大概相当于高级别,可能更高:

Dim p as Person = context.Person.Where(Function(x) x.LastName = "Smith")
If p.FirstNameColumn Is Not Nothing Then
  Console.WriteLine(p.FirstNameColumn)
End If