木子屋 Dnawo's BLOG

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

👤 dnawo 📅 2008-04-12 👁 6422 👍 0 💬 0 🔄 本站原创
原因:同时打开建立两个DataReader,而采用同一个SqlConnection(或OleDbConnection )会造成这种结果。

解决方法:两个DataReader用不同的SqlConnection。

注意:DataReader依托于SqlConnection,如果SqlConnection关闭了,DataReader也就自动消亡了~

//SqlCommand对象可以不需建立两个!
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=sa;database=Northwind;");
SqlCommand cmd = new SqlCommand("Select top 10 * From Table1", conn);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
    SqlConnection conn2 = new SqlConnection("server=(local);uid=sa;pwd=sa;database=Northwind;");
    SqlCommand cmd2 = new SqlCommand("Select top 2 * From Table1 Where ID>" + Convert.ToString(sdr["id"]), conn2);
    conn2.Open();
    SqlDataReader sdr2 = cmd2.ExecuteReader();
    while (sdr2.Read())
    {
        Response.Write(sdr2["age"] + "<br/>");
    }
    sdr2.Close();
    conn2.Close();
}
sdr.Close();
conn.Close();

在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为 SqlDataReader 服务,对 SqlConnection 无法执行任何其他操作,只能将其关闭。除非调用 SqlDataReader 的 Close 方法,否则会一直处于此状态。例如,在调用 Close 之前,无法检索输出参数。(摘自MSDN)

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 DataList的ItemCommand使用案例 下一篇 → 动态生成DataTable绑定至DataList一例