"已经有一个与此命令关联的开放DataReader必须先关闭"

时间:2014-08-06 23:22:54

标签: c# sql asp.net sql-server

我的代码返回错误“已经有一个与此命令关联的打开的DataReader必须先关闭。”我已经在我的web.config

上添加了代码“MultipleActiveResultSets = true”
        ReportViewer1.Visible = true;
        ReportViewer1.ProcessingMode = ProcessingMode.Local;

        var sqlConnection = new SQLConnectionStrings();
        var conReport = new SqlConnection(sqlConnection.strConn);
        var cmdReport = new SqlCommand();
        var myDataAdapter = new SqlDataAdapter();
        myDataAdapter.SelectCommand = cmdReport;

        SqlDataReader drReport;

        DataSet dsReport = new DataSet();
        //PerfLogDataSet();


        cmdReport.CommandType = CommandType.Text;
        cmdReport.Connection = conReport;
        conReport.Open();
        cmdReport.CommandText = baseQuery;
        drReport = cmdReport.ExecuteReader();
        myDataAdapter.Fill(dsReport); //where the error occurs
        dsReport.Tables[0].Load(drReport);
        drReport.Close();
        conReport.Close();

2 个答案:

答案 0 :(得分:1)

您尝试同时使用SqlDataAdapterSqlDataReader同时使用SqlCommand

SqlDataAdapter会将结果集加载到DataSetDataTableSqlDataReader用于循环遍历结果集一次记录,记录集样式。它们是使用两种不同意图访问数据的两种不同方法,使用它们是没有意义的。

如果您尝试加载dsReport,请删除

SqlDataReader drReport;
drReport = cmdReport.ExecuteReader();
dsReport.Tables[0].Load(drReport);
drReport.Close();

正如您已使用

加载适配器一样
myDataAdapter.Fill(dsReport);

答案 1 :(得分:0)

如果要填充数据集,请尝试使用此代码...

    ReportViewer1.Visible = true;
    ReportViewer1.ProcessingMode = ProcessingMode.Local;

    var sqlConnection = new SQLConnectionStrings();
    var conReport = new SqlConnection(sqlConnection.strConn);
    var cmdReport = new SqlCommand(baseQuery);
    var myDataAdapter = new SqlDataAdapter(cmdReport,sqlConnection );

    DataSet dsReport = new DataSet();

    conReport.Open();
    myDataAdapter.Fill(dsReport);
    conReport.Close();

但是如果你想要其他任何东西,请描述它,更多;)