显示以下代码...给定已经有一个与此Connection关联的打开DataReader,必须先关闭它。呃请帮忙 [英] show the following code... its given There is already an open DataReader associated with this Connection which must be closed first. errer please help

查看:141
本文介绍了显示以下代码...给定已经有一个与此Connection关联的打开DataReader,必须先关闭它。呃请帮忙的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

private void forselectquery()
        {
            MySqlConnection con = new MySqlConnection("Server=xxxxxxxxxx; UserId=xxxxxxxx; Password=xxxxxxxx; Database=xxxxxxxxx;");

            con.Open();
            MySqlDataAdapter da = new MySqlDataAdapter();
       

            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                try
                {
                   
                   

                    String str1 = "select * from UrlReport where URL=@URL and Title=@Title and LastVisited=@LastVisited and Date=@Date";
                    MySqlCommand cmd1 = new MySqlCommand(str1, con);
                   

                    cmd1.Parameters.AddWithValue("@URL", dataGridView1.Rows[i].Cells[0].Value);
                    cmd1.Parameters.AddWithValue("@Title", dataGridView1.Rows[i].Cells[1].Value);
                    cmd1.Parameters.AddWithValue("@LastVisited", dataGridView1.Rows[i].Cells[2].Value);
                    cmd1.Parameters.AddWithValue("@Date", label3.Text);
                    MySqlDataReader DR1 = cmd1.ExecuteReader();
                    if (DR1.Read())
                    {
                        MessageBox.Show("google"); 
                    }
                    else
                    {



                        String str = "INSERT INTO UrlReport(Date,MacAddress,URL,Title,LastVisited,LastUpdated,Expires) VALUES (@Date,@MacAddress,@URL,@Title,@LastVisited,@LastUpdated,@Expires)";
                        MySqlCommand cmd = new MySqlCommand(str, con);
                        cmd.Parameters.AddWithValue("@Date", label3.Text);
                        cmd.Parameters.AddWithValue("@MacAddress", lblMacAddress.Text);
                        cmd.Parameters.AddWithValue("@URL", dataGridView1.Rows[i].Cells[0].Value);
                        cmd.Parameters.AddWithValue("@Title", dataGridView1.Rows[i].Cells[1].Value);
                        cmd.Parameters.AddWithValue("@LastVisited", dataGridView1.Rows[i].Cells[2].Value);
                        cmd.Parameters.AddWithValue("@LastUpdated", dataGridView1.Rows[i].Cells[3].Value);
                        cmd.Parameters.AddWithValue("@Expires", dataGridView1.Rows[i].Cells[4].Value);
                        da.InsertCommand = cmd;
                        cmd.ExecuteNonQuery();
                        con.Close();
                       

                    }

                    DR1.Close();
                }
                catch (Exception EX)
                {
                   
                    MessageBox.Show("" + EX);
                }
                
            }
           
        

        }



显示以下代码...给定已经有一个与此Connection关联的开放DataReader,必须先关闭它。 errer请帮助


show the following code... its given There is already an open DataReader associated with this Connection which must be closed first. errer please help

推荐答案

在执行另一个查询之前关闭 SqlDataReader

试试这个:

Close the SqlDataReader before executing another query
Try this:
private void forselectquery()
{
MySqlConnection con = new MySqlConnection("Server=xxxxxxxxxx; UserId=xxxxxxxx; Password=xxxxxxxx; Database=xxxxxxxxx;");
 
con.Open();
MySqlDataAdapter da = new MySqlDataAdapter();

 
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
try
{


 
String str1 = "select * from UrlReport where URL=@URL and Title=@Title and LastVisited=@LastVisited and Date=@Date";
MySqlCommand cmd1 = new MySqlCommand(str1, con);

 
cmd1.Parameters.AddWithValue("@URL", dataGridView1.Rows[i].Cells[0].Value);
cmd1.Parameters.AddWithValue("@Title", dataGridView1.Rows[i].Cells[1].Value);
cmd1.Parameters.AddWithValue("@LastVisited", dataGridView1.Rows[i].Cells[2].Value);
cmd1.Parameters.AddWithValue("@Date", label3.Text);
MySqlDataReader DR1 = cmd1.ExecuteReader();
if (DR1.Read())
{
MessageBox.Show("google");

DR1.Close();//close datareader<--------------------------------
}
else
{
 
DR1.Close();//close datareader<--------------------------------
 
String str = "INSERT INTO UrlReport(Date,MacAddress,URL,Title,LastVisited,LastUpdated,Expires) VALUES (@Date,@MacAddress,@URL,@Title,@LastVisited,@LastUpdated,@Expires)";
MySqlCommand cmd = new MySqlCommand(str, con);
cmd.Parameters.AddWithValue("@Date", label3.Text);
cmd.Parameters.AddWithValue("@MacAddress", lblMacAddress.Text);
cmd.Parameters.AddWithValue("@URL", dataGridView1.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@Title", dataGridView1.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@LastVisited", dataGridView1.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@LastUpdated", dataGridView1.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@Expires", dataGridView1.Rows[i].Cells[4].Value);
da.InsertCommand = cmd;
cmd.ExecuteNonQuery();
con.Close();

 
}
 
DR1.Close();
}
catch (Exception EX)
{

MessageBox.Show("" + EX);
}

}


 
}


Refer :已经有了-an-open-datareader-related-with-this-connectio [ ^ ]
Refer: there-is-already-an-open-datareader-associated-with-this-connectio[^]


这篇关于显示以下代码...给定已经有一个与此Connection关联的打开DataReader,必须先关闭它。呃请帮忙的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆