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();
答案 0 :(得分:0)
您需要在连接字符串中使用MARS(MARS =多个活动结果集)
简而言之,当在连接字符串中启用时,此特定标志允许使用SqlDataReader用于执行命令的相同连接。否则,as stated by MSDN连接正忙于为SqlDataReader提供服务,并且无法执行其他命令 在Sql Server 2005之前,开发人员被迫创建,打开并使用另一个连接。 (如果您的环境不允许更改连接字符串,则仍然可以)
有关MARS的更多信息可以在MSDN article上找到 connection string that uses MARS
的示例