首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-09-10 
已有打开的与此命令相关联的 DataReader,必须首先将它关闭C# codepublic void Export_Click(object sender

已有打开的与此命令相关联的 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();            }        } 

热点排行