【发布时间】:2014-02-04 05:48:37
【问题描述】:
我创建了一个处理 SQL 查询的对象。实际处理查询的函数是:
Function Execute_Command(ByVal strSQLCommand As String)
Dim sqlReturnInfo As SqlDataReader
Dim sqlQuery As New SqlCommand
sqlQuery = sqlMainDBCon.CreateCommand()
sqlQuery.CommandText = strSQLCommand
sqlReturnInfo = sqlQuery.ExecuteReader
Return sqlReturnInfo
End Function
当我第一次执行代码时它工作正常,但第二次我收到一个错误,说 sqlReturnInfo 没有关闭。
我通过在声明之后将 sqlReturnInfo = Nothing 放在顶部来解决问题。
我的理解是,一旦这个函数完成,sqlReturnInfo 应该超出范围并自动销毁,然后一旦函数再次运行,sqlReturnInfo 就会重新创建为一个新对象,因此 sqlReturnInfo = nothing 不应该是必需的/
我在我的代码中的一两个其他区域也看到了这种类型的问题,超出范围的变量持续存在......
是我做错了什么,还是我对变量作用域的理解不正确?
谢谢 -RW
【问题讨论】:
-
并非所有对象都遵循该规则,无论您使用何种方法,都应在完成后丢弃。使用/结束使用块是最好的 - 它会为您处理。
标签: sql sql-server vb.net visual-studio-2010