public static SqlDataReader ExecuteReader(...
{
  ....
  return dr;
}
这个方法返回SqlDataReader 但是在返回的时候没有关闭SqlDataReader对象。
所以想到了这个方法。
public static DataTable ExecuteReader(...
{
  ......
   DataTable tb=new DataTable();
   tb.Load(dr);
    dr.Close();
   return tb;
}
我的问题是哪个方法好,返回DataTable和原方法有什么区别,这里困到了,想不通~1

解决方案 »

  1.   

    如果是想绑定到控件的话直接用SqlDataReader就可以了你说的这个区别在与SqlDataReader必须一直与数据库保持连接而你的第二个方法,先把数据填充到DataTable再去关闭,也就是也数据库断开连接了,这相当与在捞取的数据换存在本地那样
      

  2.   

    第二个方法跟直接返回datatable有区别吗?
      

  3.   


    获取只读数据,需要快速变比SqlDataReader
      

  4.   


    /// <summary>
            /// 获取记录集
            /// </summary>
            /// <param name="StrCmdText">待返回的数据集</param>
            /// <returns>返回值为SqlDataReader</returns>
            public static SqlDataReader ReturnReader(string StrCmdText)
            {
                OpenConnection();   //这个是打开数据连接,自己再写一下。
                SqlDataReader ObjDataReader = null;
                SqlCommand ObjCommand = new SqlCommand(StrCmdText, ObjConnection);            try
                {
                    ObjDataReader = ObjCommand.ExecuteReader();                if (ObjDataReader.Read())
                    {
                        return ObjDataReader;
                    }
                    else
                        return null;
                }
                catch (SqlException Ex)
                {
                    StrErrMessage = "执行数据库失败:" + Ex.Message;
                    return null;
                }
                finally
                {
                    CloseConnection();
                    ObjDataReader.Close(); ObjDataReader.Dispose();
                }
            }
      

  5.   


    都return了
    怎么会执行finally
      

  6.   


     SqlCommand cmd = new SqlCommand();
                SqlConnection conn = new SqlConnection(connectionString);            // we use a try/catch here because if the method throws an exception we want to 
                // close the connection throw code, because no datareader will exist, hence the 
                // commandBehaviour.CloseConnection will not work
                try {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                }
                catch {
                    conn.Close();
                    throw;
                }
    cmd.ExecuteReader(CommandBehavior.CloseConnection);
    再Reader关闭后关闭数据库连接