ado.net管理连接

时间:2010-06-06 11:09:43

标签: sql vb.net ado.net

我正在使用所选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的实际连接。

在检索到值后,如何关闭实际连接? 保持这些打开将创建数百个与数据库的连接,这些连接可能不会用于该会话。

2 个答案:

答案 0 :(得分:1)

Pooling=false添加到您的连接字符串中。这应该照顾它。

答案 1 :(得分:0)

您可以使用两种方法:

1 - 调用ClearAllPoolsClearPool方法。您可能更喜欢这样,以便您可以在应用程序中使用池,但在完成后清除池 2 - 调整连接字符串以不连接连接。 Go here并搜索“ ConnectionString中的连接池值”以获取更多信息。