已经有一个与此命令关联的开放数据读取器,必须首先关闭异常

时间:2017-05-05 15:43:47

标签: c# database datareader

我收到一个异常名称已经有一个打开的数据阅读器与此命令关联,必须首先关闭,我试图在Google上查找解决方案我尝试在连接字符串中使用MARS = true并且还将所有内容保留在USING中但是它没有解决问题。 我得到了一个例外   cm.ExecuteNonQuery();

public void UpdateActionSchedule(string actionScheduleKey, string note, string PEOPLE_CODE_ID)
{

    using (SqlConnection con = new SqlConnection("server=123; database=abc; user id=qwe; password=qwe;"))
    {
        con.Open();

        if (note == "" || note == null)
        {
            string UPDATE_COMPLETE = String.Format("UPDATE ACTIONSCHEDULE SET EXECUTION_DATE = '" + DateTime.Now + "', COMPLETED = 'Y', REVISION_OPID='WFLOW' where UNIQUE_KEY = '" + actionScheduleKey + "' and people_org_code_id='" + PEOPLE_CODE_ID + "'");
            SqlCommand cd = new SqlCommand(UPDATE_COMPLETE, con);
            cd.ExecuteNonQuery();
            cd.Dispose();
        }
        else
        {
            string oriNote = "";
            string GET_NOTE = String.Format("SELECT NOTE FROM ACTIONSCHEDULE WHERE people_org_code_id='{0}' and UNIQUE_KEY='{1}'", PEOPLE_CODE_ID, actionScheduleKey);
            using (SqlCommand cmd = new SqlCommand(GET_NOTE, con))
            {
                // SqlDataReader dr = cmd.ExecuteReader();
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            oriNote = dr["NOTE"].ToString();
                        }

                        note = oriNote + " " + note;
                    } 

                    //string UPDATE = String.Format("UPDATE ACTIONSCHEDULE SET Note = '" + note + "' where UNIQUE_KEY = '" + actionScheduleKey + "' and people_org_code_id='" + PEOPLE_CODE_ID + "'");
                    //SqlCommand cm = new SqlCommand(UPDATE, con);
                    //cm.ExecuteNonQuery();
                    //cm.Dispose();

                    string UPDATE_COMPLETE = String.Format("UPDATE ACTIONSCHEDULE SET EXECUTION_DATE = '" + DateTime.Now + "',Note = '" + note + "', COMPLETED = 'Y', REVISION_OPID='WFLOW' where UNIQUE_KEY = '" + actionScheduleKey + "' and people_org_code_id='" + PEOPLE_CODE_ID + "'");
                    SqlCommand cmw = new SqlCommand(UPDATE_COMPLETE, con);

                    cmw.ExecuteNonQuery();

                    cmw.Dispose();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在代码的后半部分,您有一个循环超过cmd / dr内部循环,您使用cmw与{{ 1}}。这意味着您要尝试一次执行两个命令。由于您已经完成了循环:只需将代码移到<{1>}上的ExecuteNonQuery

然而,它看起来就像你也可以用更好的SQL在一次往返中完成所有这些。