我想知道是否有可能在试图收集其值之前检查记录中的特定单元格是否为空,如果它不能被分配到一个变量,程序就会崩溃。
沿着这样的思路 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真的很低级,而且相当辛苦。有很多更简单的方法来使用数据库。下一步可能合理的是一个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