应用程序对象正在关闭_为什么要关闭数据库连接,可以不关闭吗?

ffbda60310d34180d62507594f59df0d.png

首先要说明的是连接数是有限制的:

代码如下:

for 

运行结果如下:

a120c3e3f93e69ddaadfe20179c26eeb.png

过一会就会提示打开连接超时了:

b8cb658a49545fa61cad7b3b64de0aeb.png

可以看到数据库连接时有限制的,如果连接不关闭,而且使用的人比较多,那么系统很快就down掉了。

但是有时候由于某些原因应用程序可能只是几个人使用,所以就有人设计了:

在应用程序启动的时候打开数据库连接,在应用程序关闭的时候关闭数据库连接

那么使用这种方式有什么问题呢?

首先假设有一张表Nums,表定义如下:

5df832d2e8b04c6803bf0f785bd4d930.png

Main代码如下:

SqlConnection 

就是从1到9999开始执行ExecuteCommand

ExecuteCommand代码如下:

private 

运行:

c2e762e5b5a79cb41493990709cf89f4.png

可以看到ExecuteNonQuery方法抛出了异常,原因是连接处于关闭状态。

可是我们的连接一直都是open着的啊,并没有调用close,dispose之类的方法啊

于是在ExecuteCommand前面增加判断条件:

if 

再次运行:

3dea4b1b541b4752f95b2aca5e0a92cc.png

可以看到还是会出现连接已关闭的问题。你知道什么原因吗?

这里是由于多线程环境引起的。所以需要加锁。

private 

再次运行:可以发现基本没问题了.

修改Parallel.For的最大值上限,要测试下是否可以长期执行了。

Parallel

一天测试下来,没出现任何问题。

结论:对于某些只有几个人使用的应用程序,可以不关闭数据库连接,但是在写代码的时候最好要加上连接是否打开的判断。

你有什么好的看法呢,欢迎在评论区留言~

>>>学习交流群< < <课件,视频,项目,源码,你想要的这里都有

加群暗号:“知乎”

风里雨里,我们等你~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值