Mc3190 数据库连接



问题描述:

                扫描枪通过Wifi连接于数据库建立连接,关闭扫描枪电源使之处于待机状态,等待一段时间后,打开扫描枪于数据库通讯,发生异常。

异常原因:

               数据库访问使用的是Ado.net ,而微软的数据库连接SqlConnection,使用的了Pooling连接池技术。

               使用 SqlConnection.Status == Open 判断数据库的连接状态是不可以得到当前的实际状态的,也就是说即使使用SqlConnection.Open()打开数据库没有异常,而且判断Status == Open,也不能保证实际物理连接是Open的。当程序使用到了,已经关闭的数据库链接时,就会抛处异常。

解决方法:


每次获取书库库链接的时候,即使Open状态,也要先访问数据库一次确保当前的链接状态是最新的。

列入:    

if (con !=null && con.State == System.Data.ConnectionState.Open)

{

              while(true)

              {

                 SqlDataReader dr = null;
                    try
                    {
                        SqlCommand cmd = con.CreateCommand();
                        cmd.CommandText = "select 1";
                        dr = cmd.ExecuteReader();
                        dr.Close();
                        dr = null;

                         break;
                    }
                    catch (SqlException e)
                    {              

                        System.Threading.Thread.Sleep(500);
                        con.Dispose();
                        con = null;
                    }

                   con.open();

           }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值