读书人

已有打开的与此下令相关联的 DataRead

发布时间: 2012-09-10 11:02:32 作者: rapoo

已有打开的与此命令相关联的 DataReader,必须首先将它关闭

C# code
public void Export_Click(object sender, EventArgs e){        string sqlString = "server=.\\SQL2005;database=stu_info;uid=sa;pwd=123456";        try        {            SqlConnection sqlconn = new SqlConnection(sqlString);            sqlconn.Open();            string sql = "SELECT A.id,A.name,B.title FROM person AS A JOIN book AS B ON A.id=B.id";            SqlCommand cmd = new SqlCommand(sql, sqlconn);            SqlDataReader reader = cmd.ExecuteReader();            string insql;            while (reader.Read())            {                insql = "INSERT INTO lh VALUES('" + reader[0] + "','" + reader[1] + "','" + reader[2] + "')";                SqlCommand incmd = new SqlCommand(sql, sqlconn);                incmd.ExecuteNonQuery();            }        }        catch (SqlException ex)        {            string MsgEx = ex.Message;            MsgExport.Visible = true;            MsgExport.Text = MsgEx;        }    }

上面代码在调试时
到这一行:
C# code
incmd.ExecuteNonQuery();

提示:{"已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"}
请问下这个函数应该怎么写才能避免这个问题,又能实现想要的功能?

[解决办法]
当然也可以稍微简化一点
C# code
        string sqlString = "server=.\\SQL2005;database=stu_info;uid=sa;pwd=123456";        using(SqlConnection sqlconn = new SqlConnection(sqlString))        using(SqlConnection sqlconn2 = new SqlConnection(sqlString))        {            sqlconn.Open();            sqlconn2.Open();            string sql = "SELECT A.id,A.name,B.title FROM person AS A JOIN book AS B ON A.id=B.id";            SqlCommand cmd = new SqlCommand(sql, sqlconn);            SqlDataReader reader = cmd.ExecuteReader();            string insql;            SqlCommand incmd = sqlconn2.CreateCommand();            while (reader.Read())            {                insql = "INSERT INTO lh VALUES('" + reader[0] + "','" + reader[1] + "','" + reader[2] + "')";                incmd.CommandText= insql;                incmd.ExecuteNonQuery();            }        } 

读书人网 >C#

热点推荐