关闭并打开与Command关联的DataReader

时间:2014-02-17 13:46:54

标签: c#-4.0 ado.net sqldatareader datareader

string connectionString = ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString;
                const string query = "my Select query here";

                List<long> myList = new List<long>();
                using (SqlConnection con = new SqlConnection(connectionString))
                {
                    con.Open();
                    using (SqlCommand selectCommand = new SqlCommand(query, con))
                    {
                        selectCommand.CommandType = CommandType.Text;
                        SqlDataReader sqlreader = selectCommand.ExecuteReader();

                        while (sqlreader.Read())
                        {
                           long Id = (long)sqlreader["Id"];
                            List.Add(Convert.ToInt32(sqlreader[0].ToString()));

                            using (SqlCommand insertCommand = new SqlCommand("dbo.SP_Data", con))
                             {

                                 insertCommand.CommandType = CommandType.StoredProcedure;
                                 insertCommand.Parameters.Add("@Id", SqlDbType.BigInt).Value = Id;
                                 insertCommand.Parameters.Add("@StatusId", SqlDbType.BigInt).Value = 1;
                                 insertCommand.Parameters.Add("@ReportDate", SqlDbType.DateTime).Value = DateTime.Now;
                                 insertCommand.Parameters.Add("@CreatedDate", SqlDbType.DateTime).Value = DateTime.Now;
                                 insertCommand.Parameters.Add("@CreatedBy", SqlDbType.UniqueIdentifier).Value = DefaultUser();

                                 insertCommand.ExecuteNonQuery();
                             }
                        }
                    }
                }

我收到错误“已经有一个与此命令关联的打开DataReader,必须先关闭。”在最后一行[insertCommand.ExecuteNonQuery();

1 个答案:

答案 0 :(得分:0)

您需要在连接字符串中使用MARS(MARS =多个活动结果集)

简而言之,当在连接字符串中启用时,此特定标志允许使用SqlDataReader用于执行命令的相同连接。否则,as stated by MSDN连接正忙于为SqlDataReader提供服务,并且无法执行其他命令 在Sql Server 2005之前,开发人员被迫创建,打开并使用另一个连接。 (如果您的环境不允许更改连接字符串,则仍然可以)

有关MARS的更多信息可以在MSDN article上找到 connection string that uses MARS

的示例