今天在使用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
然后我再测试就没有问题了