测试空单元格的访问DB VB.net?

问题描述 投票:1回答:1

我想知道是否有可能在试图收集其值之前检查记录中的特定单元格是否为空,如果它不能被分配到一个变量,程序就会崩溃。

沿着这样的思路 SELECT FirstNameColumn FROM tableNames WHERE LastNameColumn = "Smith",并测试是否 FirstNameColumn 中有一个值。

我使用VB.net,使用OleDB和一个Access数据库。

vb.net oledb
1个回答
2
投票

如果你有一些检索记录的代码,而行中的一些值可能是空的。

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真的很低级,而且相当辛苦。有很多更简单的方法来使用数据库。下一步可能合理的是一个dataadapter和datatable,提供类似的功能。

 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

实体框架可能是相当高的层次,可能更高。

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
© www.soinside.com 2019 - 2024. All rights reserved.