我知道我在这里做的事情真的很暗,因为这是一段非常简单的代码,但是我看不到它。
我有一个具有字典类型单个属性的类。此类仅针对数据库表snd进行存储,这些表将一些值存储在dictionary属性中。麻烦的是,我在下面的代码中的LookupValues.Add行上遇到了System.NullReferenceException:
Public Class Lookup
Private _LookupValues As Dictionary(Of Integer, String)
Public Sub New(LookupToRetrieve As String)
Dim sqlQuery As String
sqlQuery = "SELECT * From LookupValues (NOLOCK) WHERE lookup_name = @LookupName"
Using connection As New SqlConnection(My.Settings.PDFProcessorConnectionString)
connection.Open()
Using comm As New SqlCommand(sqlQuery, connection)
comm.Parameters.Add("@LookupName", SqlDbType.VarChar, 20).Value = LookupToRetrieve
Dim rs As SqlDataReader = comm.ExecuteReader
Dim dt As New DataTable
dt.Load(rs)
For Each row As DataRow In dt.Rows
LookupValues.Add(row.Item("lookup_value"), row.Item("lookup_text"))
Next
End Using
End Using
End Sub
Public Property LookupValues As Dictionary(Of Integer, String)
Get
Return _LookupValues
End Get
Private Set(value As Dictionary(Of Integer, String))
_LookupValues = value
End Set
End Property
End Class
我只是看不到这里有什么问题-查询返回有效数据,但不会将其添加到字典中...我在做什么错了?
答案 0 :(得分:1)
您永远不会创建字典。因此_LookupValues
将始终为Nothing
。
我将LookupValues
设为只读。这意味着您不能为其分配其他词典。这并不意味着字典本身是只读的。
Public ReadOnly Property LookupValues As New Dictionary(Of Integer, String)
您可以使用Visual Basic 14的ReadOnly Auto-Implemented Properties。即您无需显式声明支持字段。
这仍然有效:
LookupValues.Add(CInt(row.Item("lookup_value")), CStr(row.Item("lookup_text")))
我还建议使用Option Strict On
。