Public Function ExecCommand(ByVal sql As String) As SqlDataReader
Dim dReader As SqlDataReader
Dim cmd As New SqlCommand()
cmd.CommandText = sql
cmd.Connection = sm
Dim isOpened = OpenConnection()
If isOpened Then
dReader = cmd.ExecuteReader()
CloseConnection()
End If
Return dReader
End Function
它表示在运行时可能会出现一个空引用,用于声明该datareader。那是为什么?
答案 0 :(得分:5)
这是因为如果不满足If条件,则可能不会初始化dReader
变量。默认情况下,您可以将其初始化为Nothing
:
Dim dReader As SqlDataReader = Nothing
显然,这种方法的调用者需要处理这种情况。
同样作为C#移民,您可能会感到惊讶,为什么您没有收到编译时错误,只是警告。
答案 1 :(得分:2)
如果OpenConnection()失败,则isOpened为false。将不执行以下块,并且不会分配dReader。
Public Function ExecCommand(ByVal sql As String) As SqlDataReader
Dim dReader As SqlDataReader // Not assigned yet
Dim cmd As New SqlCommand()
cmd.CommandText = sql
cmd.Connection = sm
Dim isOpened = OpenConnection() // Fails to connect
If isOpened Then // Not executed
dReader = cmd.ExecuteReader()
CloseConnection()
End If
Return dReader // Return value unknown
作为旁注,CloseConnection()也不会执行,因此您以后可能会遇到一些问题。
答案 2 :(得分:0)
添加其他statemnt,其中将dreader指定为null。
Public Function ExecCommand(ByVal sql As String) As SqlDataReader
Dim dReader As SqlDataReader=Nothing
Dim cmd As New SqlCommand()
cmd.CommandText = sql
cmd.Connection = sm
Dim isOpened = OpenConnection()
如果isOpened那么
dReader = cmd.ExecuteReader()
CloseConnection()
结束如果
返回dReader结束函数