FirebirdSql.Data.FirebirdClient.FbDataAdapter的bug吗

在连接Firebird4数据库时,使用以下:

1
2
3
4
FbDataAdapter da = new FbDataAdapter(sql, this.cnstring);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;

 在一直的相像中,FbDataAdapter在接收到连接字符串时,会自动创建一个Connection并Open使用,用完再Close,即不需要我们外部操作。但在实际中出现了错误,使用一会后会出现 Connection pool is full错误

应该是connection打开后没有关闭,改为以下代码后不再出错误:

1
2
3
4
5
6
7
8
using (FbConnection cn = new FbConnection(this.cnstring))
{
    cn.Open();
    FbDataAdapter da = new FbDataAdapter(sql, cn);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

  查询FbDataAdapter的源代码,增加一行代码SelectCommand.Connection.Close()后程序正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (!_disposed)
        {
            _disposed = true;
            if (_shouldDisposeSelectCommand)
            {
                if (SelectCommand != null)
                {
                    SelectCommand.Connection.Close();
                    SelectCommand.Close();
                    SelectCommand.Dispose();
                    SelectCommand = null;
                }
            }
            base.Dispose(disposing);
        }
    }
}

 

也许不是bug,也许是不同供应商实现的方式不一样,因此以后无论是对mysql还是mssql时,都自己打开connection,使用后自己关闭要靠谱一点。

posted @   81  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
历史上的今天:
2011-12-15 C#内存复制与比较
2011-12-15 .net4调用非托管代码出现:PInvoke调用导致堆栈不对称
点击右上角即可分享
微信分享提示