Vb.net try块内的DataReader导致潜在的空引用错误
可能有一个简单的修复方法,但我目前有类似的代码Vb.net try块内的DataReader导致潜在的空引用错误,vb.net,visual-studio,exception,Vb.net,Visual Studio,Exception,可能有一个简单的修复方法,但我目前有类似的代码 dim dr as dbDataReader try dr = connection.getDataReader(sql_str) Catch ex as sqlClientException log.error(ex) finally if not IsNothing(dr) then dr.close end if end try 然而VisualStudio仍然警告我 if not IsNothi
dim dr as dbDataReader
try
dr = connection.getDataReader(sql_str)
Catch ex as sqlClientException
log.error(ex)
finally
if not IsNothing(dr) then
dr.close
end if
end try
然而VisualStudio仍然警告我
if not IsNothing(dr) then
dr.close
end if
可能导致NullReferenceException。缓解这种情况的最佳方法是什么?我无法将声明移动到try块中。您的代码是正确的。在
finally
语句中,只要您检查以确保对象不为null,它就不会根据代码中发生的情况引发null引用异常。我不记得VB.NET如何初始化变量,但在C#中,您必须先设置“dr”一些值/引用,然后才能在某处使用它们
我认为这应该奏效:
dim dr as dbDataReader
try
dr = connection.getDataReader(sql_str)
Catch ex as sqlClientException
log.error(ex)
dr = Nothing ' there is the change '
' finaly block is not necesary '
end try
if not IsNothing(dr) then
dr.close
end if
将dr声明显式初始化为Nothing,如下所示:
Dim dr As DbDataReader = Nothing
警告将消失。如果
GetDataReader
抛出,则不会分配dr
,并且仍将保留其初始值。VB.NET确实初始化了对Nothing
的引用,但编译器不会让您依赖它
如果使用.NET 2.0,我建议使用语句:
Using dr As DbDataReader = connection.GetDataReader(sql_str)
Try
' Do something with dr '
Catch ex As SqlClientException
log.error(ex)
End Try
End Using
到底什么是“不起作用”?编译错误(如果是,请发送消息)?或者它在运行时不起作用(抛出异常?如果是,请发送exception.ToString()。我目前的计算机上没有VB.NET编译器:(应用您的建议后,原始海报代码生成的编译时警告仍然存在。