关于C#在打开和关闭数据库的问题

今天在使用C#操作数据库的时候,老是会报这样一个错误: 
There is already an open DataReader associated with this Connection which must be closed first.
咦~什么鬼,我不是在每次用完数据库就关闭了吗?怎么会还会报这种错误?

我检查了代码发现,造成这个错误的原因主要是两个线程同时要访问同一个数据库,一个线程已经打开了数据库,正在操作,这时另一个也要打开这个数据库,这时就报错了。
刚开始的时候我打开数据库部分的代码是这样写的
public void OpenMySql()
        {
            try
            {//打开通道,建立连接,可能出现异常,使用try catch语句
                if(conn.State != ConnectionState.Open)                    
                    conn.Open();
            }
            catch (MySqlException ex)
            {
                switch (ex.Number)
                {
                    case 0:
                        Console.WriteLine("Cannot connect to server.  Contact administrator");
                        break;
                    case 1045:
                        Console.WriteLine("Invalid username/password, please try again");
                        break;
                }
            }
        }
然后我将代码进行了改进
public void OpenMySql()
        {
            try
            {//打开通道,建立连接,可能出现异常,使用try catch语句
                while(conn.State != ConnectionState.Open)                    
                    conn.Open();
            }
            catch (MySqlException ex)
            {
                switch (ex.Number)
                {
                    case 0:
                        Console.WriteLine("Cannot connect to server.  Contact administrator");
                        break;
                    case 1045:
                        Console.WriteLine("Invalid username/password, please try again");
                        break;
                }
            }
        }
我仅仅只是把    if   改成了   while  
然后我再测试就没有问题了
 
一个线程不停的往数据库中写数据,另一个线程不停的从数据库中读数据,没有报错。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值