2

我正在使用 asp.net c# webforms framework 4.5 开发一个项目,并且我对 Firebird 数据库进行了连接测试,但是当我关闭此连接时它并没有关闭,我使用以下代码来执行此操作:

string conDDNS;
FbConnection conexaoDDNS;

protected void Abrir_Fechar_Click(object sender, EventArgs e)
{
    try
    {
        this.conDDNS = "DRIVER=InterBase/Firebird(r) driver;User=SYSDBA;Password=masterkey;Database=localhost:C:/AdCom/ADCOM.FDB";

        this.conexaoDDNS = new FbConnection(conDDNS);
        this.conexaoDDNS.Open();
        ListItem item = new ListItem("Conexão aberta");
        ListBox1.Items.Add(item);

        this.conexaoDDNS.Dispose();
        this.conexaoDDNS.Close();
        ListItem item2 = new ListItem("Conexão fechada");
        ListBox1.Items.Add(item2);

    }
    catch (Exception erro)
    {
        ListItem item = new ListItem(erro.ToString());
        ListBox1.Items.Add(item);
    }

}

我已经使用了.Close()and.Dispose()命令,但是没有用。

当我进行这个调试时,我意识到当它通过.Open()命令它打开连接时,没关系。但是当它通过.Close()命令时,连接仍然在数据库上打开。

要知道在数据库上打开的连接数,我使用以下命令:

select * FROM MON$ATTACHMENTS
4

1 回答 1

9

Firebird .NET 提供程序有一个内置的连接池,默认启用。您可以添加Pooling=false到连接字符串以禁用它。但是在很多情况下,连接池是一件好事(它可以节省打开连接的时间),所以请确保您确实需要禁用它。

调用FbConnection.ClearPool(connection)FbConnection.ClearAllPools()应该关闭池中当前打开的连接。

还要确保在查询时开始新事务MON$ATTACHMENTS。监控表的内容被“冻结”在单个事务中。

于 2016-02-16T16:34:12.220 回答