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