我在应用程序中关闭SQLconnection时遇到问题。我的应用程序是在VB.net中。我在我的应用程序中引用了一个带有代码的类来打开和关闭数据库连接并执行所有sql脚本。
关闭我的应用程序时发生错误。在我的主窗体的formClosing事件中,我调用一个关闭所有连接的函数。但是在我关闭连接之前,我执行一个SQLquery来删除具有下面函数的表中的行。
Public Function DeleteFunction(ByVal mySQLQuery As String, ByVal cmd As SqlCommand) As Boolean
Try
cmd.Connection = myConnection
cmd.CommandText = mySQLQuery
cmd.ExecuteNonQuery()
Return True
Catch ex As Exception
WriteErrorMessage("DeleteFunction", ex, Logpath, "SQL Error: " & mySQLQuery)
Return False
End Try
End Function
在我的应用程序中,我检查布尔值的结果。如果它返回True,那么我调用该函数来关闭数据库连接。
返回的布尔值为True,并且在我的数据库中删除了请求的行。这意味着我可以关闭与以下功能相关的连接。
Public Sub DatabaseConnClose()
myCommand.CommandText = ""
myConnection.Close()
myCommand = Nothing
myConnection = Nothing
End Sub
执行此代码后,我在DeleteFunction的日志文件中收到错误。它说:“连接属性尚未初始化。”
从完全执行的函数中收到错误似乎很奇怪,或者我认为错了?
有谁能告诉我为什么会收到此错误以及如何解决问题?
答案 0 :(得分:1)
我相信你有两个问题都得到了回答。处理连接和formClosing事件触发。
我看到" myConnection"和" myCommand"因为没有本地范围。这个对象不应该在班级(你的表格)举行。您应该在使用块中打开连接,并尽快处理连接。 (如所述的@PaulG)如果您正在使用连接池,那么使用using块将允许将连接返回到池。如果你不这样做,你可能会遇到各种各样的问题。
一旦正确处理了连接,你可能仍然会遇到问题,因为formClosing事件可能会多次触发(正如@SysDragon已经说过的那样)。我的简单布尔标志可以帮助你。
答案 1 :(得分:1)
感谢您的帮助。我终于解决了这个问题。我的所有代码都是在我的表单的FormClosing事件中执行的。但现在我将代码分成两部分。我在FormClosing事件中留下的代码段是delete函数的调用。我移动了调用函数的代码来关闭与 FormClosed 事件的数据库连接。
所以我的代码没有任何问题,只有这个地方错了。
答案 2 :(得分:0)
我确信你有充分的理由以你的方式关闭连接,但为什么不试试呢?
Public Function DeleteFunction(ByVal mySQLQuery As String) As Boolean
Try
using conn as new sqlconnection("connstring"), comm as new sqlcommand("",conn)
conn.open()
comm.commandtext = mySQLQuery
comm.ExecuteNonQuery()
end using
Return True
Catch ex As Exception
WriteErrorMessage("DeleteFunction", ex, Logpath, "SQL Error: " & mySQLQuery)
Return False
End Try
End Function