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,使用后自己关闭要靠谱一点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 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调用导致堆栈不对称