我正在使用所选SQL实例上的数据库列表填充listview,然后从每个数据库中检索一个值(它的内部产品版本,列并不总是存在)我正在调用以下函数来填充列表视图的第二列:
item.SubItems.Add(DBVersionCheck(serverName,database.Name))
Function DBVersionCheck(ByVal SelectedInstance As String, ByVal SelectedDatabase As String)
Dim m_Connection As New SqlConnection("Server=" + SelectedInstance + ";User Id=sa;Password=password;Database=" + SelectedDatabase)
Dim db_command As New SqlCommand("select Setting from SystemSettings where [Setting] = 'version'", m_Connection)
Try
m_Connection.Open()
Return db_command.ExecuteScalar().trim
m_Connection.Dispose()
Catch ex As Exception
'MessageBox.Show(ex.Message)
Return "NA"
Finally
m_Connection.Dispose()
End Try
End Function
除了创建与每个数据库的连接并使其保持打开之外,它的工作正常。 我的理解是close()\ dispose()只释放ado中池的连接,而不是与sql的实际连接。
在检索到值后,如何关闭实际连接? 保持这些打开将创建数百个与数据库的连接,这些连接可能不会用于该会话。
答案 0 :(得分:1)
将Pooling=false
添加到您的连接字符串中。这应该照顾它。
答案 1 :(得分:0)
您可以使用两种方法:
1 - 调用ClearAllPools
或ClearPool
方法。您可能更喜欢这样,以便您可以在应用程序中使用池,但在完成后清除池
2 - 调整连接字符串以不连接连接。 Go here并搜索“ ConnectionString中的连接池值”以获取更多信息。