来自不同类的两个DataReader,但是我收到错误?

时间:2012-01-31 19:27:24

标签: c#-4.0 ado.net

我有一个项目类,与之相关我有一个类和负责类。当我想将项目对象添加到数据库时,我从categories类中调用一个方法来获取类别id,并对负责的类执行相同的操作。我的意思是:

int categoryId = getCategoryId("Beverages");
int responsibleId = getResponsibleId("An Example Name");

这两个方法在不同的类中,但使用类似的代码。当我运行程序时,我收到错误:

"There is already an open DataReader associated with this Command which must be closed first."

2 个答案:

答案 0 :(得分:0)

您必须修复代码,以便只有一个活动(开放)DataReader对象在单个DbConnection上处于活动状态,或在您的连接字符串中启用MARS(MultipleActiveResultSets=True)。

答案 1 :(得分:0)

我同意Mithrandir的观点,但你的问题还有另一种解决方法;我想你列出的方法可以访问数据库(愚蠢,我知道,但是我不知道),并且它们都打开了与同一个数据库的连接。您应该在代码中添加的是最后一个块,它在执行事务后关闭数据库连接:

    try
          {
             string sql="select * from ...."
             connection.Open();
             comand.CommandText = sql;
             comand.ExecuteNonQuery();
          }

    catch(SQLException)
    {
    }

    finally
    {
     if (connection!=null)
                {
                    connection.Close();
                }
    }