C#连接数据库的这两种方法有什么不同吗??
方法1: 
 SqlConnection   sqlcon   =   new   SqlConnection( "server=.\\sqlexpress;database=db;AttachDbFilename=C:\\db.mdf;Trusted_Connection=Yes "); 
 sqlcon.Open(); 
 SqlDataAdapter   sqlda   =   new   SqlDataAdapter( "select   *   from   tb ",sqlcon); 
 sqlda.Fill(ds, "pp "); 
 dataGridView1.DataSource=ds.Tables[0];   
 方法2: 
 SqlConnection   sqlcon   =   new   SqlConnection( "server=.\\sqlexpress;database=db;AttachDbFilename=C:\\db.mdf;Trusted_Connection=Yes "); 
 sqlcon.Open(); 
 SqlCommand   sqlcmd   =   new   SqlCommand( "select   *   from   tb ",sqlcon); 
 DataReader   Rd; 
 Rd   =   cmd.ExecuteReader();    
 for(int   i;i <=Rd.Legth();i++) 
 {                            
          dataGridView1.DataSource=Rd.GetString(i); 
 }                             
------解决方案--------------------第一个是一次把所有数据取出来,取出来之后就成为离线数据. 
 第二个是利用Reader,读一次取一次. 
 相对来说,Reader是只读的,所以速度很快, DataSet比较方便但是速度慢一点.
------解决方案--------------------dataset 内存中的数据库 
 Reader 只读向后的记录集
------解决方案--------------------DataSet将数据库中的内容保存到内存中,因此DataSet又被称为内存中的数据库。
------解决方案--------------------使用DataReader的时候需要关闭数据库的连接,否则后果不堪设想!    
  初学者建议用DataSet    
  要是代码的功夫厉害的,那个用的好用那个! 
------解决方案--------------------当然不一样了 一个把数据通过Fill加载到内存里了一份儿 
 一个只是通过数据库把数据取出来了 
 我感觉 要是频繁查询数据库,还是用Fill把数据库加载到内存是最好的 
 要只是简单提交一个结果或者察看一下 
 反正都要和数据库建立连接,我看就没有必要再占用内存了
------解决方案--------------------DataAdapter + DataSet 是离线内存数据集 
 优点:快!可更改,可定位,支持多个表,支持关系和约束,支持 View,支持过滤器等 
 缺点:占用内存较大,存在和数据库的同步问题 
 适用范围:具有关系的多个表的操作,少量纪录的更改操作等,如新闻编辑,订单修改等   
 DataReader 是只进只读的数据集 
 优点:非常快!占用资源极小 
 缺点:只读,不支持游标,每次操作都需要打开及关闭数据库连接 
 适用范围:一次性读取大量不必更改的纪录,如新闻列表,产品目录等。大多数用于显示目的的纪录读取都应该用 DataReader