日期:2014-05-20  浏览次数:20670 次

如何复制一个SqlDataReader
public   SqlDataReader   sdr;

    using   (SqlConnection   conn   =   new   SqlConnection(conn))
                        {
                                System.Data.DataTable   dt   =   new   System.Data.DataTable( "dt ");
                                conn.Open();
                                SqlCommand   cmd   =   conn.CreateCommand();
                                cmd.CommandText   =   "select   *   from   xiuxian   where   id= "   +   id;
                                  SqlDataReader   sdr0   =   cmd.ExecuteReader();
                                  sdr=sdr0;
                          //......
                          }
上述代码中sdr是一个全局变量,用来保存一个SqlDataReader对象,在using块中取得创建了一个SqlDataReader临时对象sdr0,由于sdr0的生命期指在using块内,
切sdr的得到的是引用值,sdr在using块外访问时就会出错
问题:如何复制一个SqlDataReader对象象,也就是怎么得到一个sdr0的副本

------解决方案--------------------
按你的要求是不能用using 来管理SqlConnection了.
因为出了using块后SqlConnection换去作用,SqlDataReader 也就变的不可以用了.

你可以在使用好SqlDataReader 后再去手动的关闭SqlConnection以保证SqlDataReader 的正常使用:
SqlConnection conn = new SqlConnection(conn);
conn.Open();
System.Data.DataTable dt = new System.Data.DataTable( "dt ");
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from xiuxian where id= " + id;
SqlDataReader sdr0 = cmd.ExecuteReader();
//......
sdr0.Close();
conn.Close();