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

原因:同时打开建立两个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 | 引用: 0 | 查看次数: 5933
发表评论
登录后再发表评论!