У меня есть этот унаследованный код:Ошибка «Существует уже открытая DataReader, связанная с этой командой, которая должна быть закрыта первой» при использовании 2 различных команд
private void conecta()
{
if (conexao.State == ConnectionState.Closed)
conexao.Open();
}
public List<string[]> get_dados_historico_verificacao_email_WEB(string email)
{
List<string[]> historicos = new List<string[]>();
conecta();
sql =
@"SELECT *
FROM historico_verificacao_email
WHERE nm_email = '" + email + @"'
ORDER BY dt_verificacao_email DESC, hr_verificacao_email DESC";
com = new SqlCommand(sql, conexao);
SqlDataReader dr = com.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
string[] dados_historico = new string[6];
dados_historico[0] = dr["nm_email"].ToString();
dados_historico[1] = dr["dt_verificacao_email"].ToString();
dados_historico[1] = dados_historico[1].Substring(0, 10);
dados_historico[2] = dr["hr_verificacao_email"].ToString();
dados_historico[3] = dr["ds_tipo_verificacao"].ToString();
sql =
@"SELECT COUNT(e.cd_historico_verificacao_email) QT
FROM emails_lidos e
WHERE e.cd_historico_verificacao_email =
'" + dr["cd_historico_verificacao_email"].ToString() + "'";
tipo_sql = "seleção";
conecta();
com2 = new SqlCommand(sql, conexao);
SqlDataReader dr3 = com2.ExecuteReader();
while (dr3.Read())
{
//quantidade de emails lidos naquela verificação
dados_historico[4] = dr3["QT"].ToString();
}
dr3.Close();
conexao.Close();
//login
dados_historico[5] = dr["cd_login_usuario"].ToString();
historicos.Add(dados_historico);
}
dr.Close();
}
else
{
dr.Close();
}
conexao.Close();
return historicos;
}
я создал два отделяет команды, чтобы исправить но он по-прежнему продолжается: «Существует уже открытый DataReader, связанный с этой Командой, который должен быть закрыт первым».
Дополнительная информация: тот же код работает в другом приложении.
У вас есть уязвимость в SQL-инъекции. – SLaks
Возможный дубликат [Существует уже открытый DataReader, связанный с этой Командой, который должен быть закрыт первым] (http://stackoverflow.com/questions/6062192/there-is-already-an-open-datareader-associated-with- this-command-which-must-be-c) –
Это не просто команда, это соединение. Если вы используете одно и то же соединение для обеих команд, вы получите сообщение об ошибке. –