相关疑难解决方法(0)

错误"当使用2个不同的命令时,"已经有一个与此命令关联的打开的DataReader必须先关闭"

我有这个遗留代码:

 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 = …
Run Code Online (Sandbox Code Playgroud)

c#

66
推荐指数
6
解决办法
18万
查看次数

了解C#中的嵌套SQL

using (var connection = new SqlConnection(...))
{
    string sql = "SELECT * FROM tableA";
    using (var command = new SqlCommand(sql,connection))
    {
        using (var reader = command.ExecuteReader(...))
        {
            //***************Sample Start
            string sql2 = "INSERT into tableB(column1) VALUES('"+reader["column1"]+"')";
            using (var command2 = new SqlCommand(sql2,connection))
            {
                ...
            } 
            //***************Sample End
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通过使用上面的代码片段,我相信它是在C#中处理SQL的最佳实践.现在,在我从tableA中检索记录列表之后,我希望将每一行插入到tableB中.

但是,这是一个例外

已经有一个与此命令关联的打开DataReader,必须先关闭它

我知道这个问题可以通过创建另一个方法并从那里插入表中来解决,我想知道是否还有其他方法.感谢您的任何意见.

c# sql sql-server

3
推荐指数
1
解决办法
4009
查看次数

标签 统计

c# ×2

sql ×1

sql-server ×1