当前位置:编程学习 > C#/ASP.NET >>

C#如何绑定数据

在实际应用中到底是用DataSource去绑定到DataGridView中还是一条条添加上去?
一条条添加上去确实慢很多,不过听说用DataSet的话占用内存比较大,你们是怎么做的呢,谢谢! --------------------编程问答--------------------
SqlConnection conn = new SqlConnection("Data Source=.;User ID=sa;Password=sa;Initial Catalog=Test;");
DataSet ds = new DataSet(); 
string sql = "select * from Table1"; 
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds); 
dataGridView1.DataSource = ds.Tables[0]; 

今天问绑定的人很多啊

http://topic.csdn.net/u/20091014/10/3ed6d3aa-6fa1-4775-9f76-c7afc7907c39.html --------------------编程问答-------------------- 哈哈..楼上的..应该先打开数据库连接吧..

SqlConnection conn = new SqlConnection("Data Source=.;User ID=sa;Password=sa;Initial Catalog=Test;");
conn.Open();
DataSet ds = new DataSet(); 
string sql = "select * from Table1"; 
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds); 
dataGridView1.DataSource = ds.Tables[0]; 
conn.Close();
--------------------编程问答-------------------- 1楼答非所问...
应该看具体情况吧 如果数据量特别大的话还是手动绑定比较好 --------------------编程问答--------------------
引用 3 楼 xuenzhen123 的回复:
1楼答非所问...
 应该看具体情况吧 如果数据量特别大的话还是手动绑定比较好


数据量大也可以采用分页载入。
手动绑定又是怎么个绑定法??
--------------------编程问答--------------------
引用 4 楼 huming_h 的回复:
引用 3 楼 xuenzhen123 的回复:
1楼答非所问...
应该看具体情况吧 如果数据量特别大的话还是手动绑定比较好


数据量大也可以采用分页载入。
手动绑定又是怎么个绑定法??

分页 --------------------编程问答--------------------
引用 3 楼 xuenzhen123 的回复:
1楼答非所问...
应该看具体情况吧 如果数据量特别大的话还是手动绑定比较好

答非所问了?有点无法接受 --------------------编程问答-------------------- 查询用datareader --------------------编程问答-------------------- 我觉得还是用ds比较好吧,数据量大可以分页显示啊,内存消耗也不算大 --------------------编程问答--------------------
引用 2 楼 duanfengo7 的回复:
哈哈..楼上的..应该先打开数据库连接吧..
C# code
SqlConnection conn=new SqlConnection("Data Source=.;User ID=sa;Password=sa;Initial Catalog=Test;");
conn.Open();
DataSet ds=new DataSet();string sql="select * from Table1"; 
SqlDataAdapter da=new SqlDataAdapter(sql, conn);
da.Fill(ds); 
dataGridView1.DataSource= ds.Tables[0]; 
conn.Close();

对  直接绑定  如果要想一条条加也行 --------------------编程问答-------------------- 直接设置DataSource就用不到实体类了,如果一条条绑定的话,就会用到datareader和List,不知用哪种方法更好一些 --------------------编程问答--------------------
引用 2 楼 duanfengo7 的回复:
哈哈..楼上的..应该先打开数据库连接吧..
C# code
SqlConnection conn=new SqlConnection("Data Source=.;User ID=sa;Password=sa;Initial Catalog=Test;");
conn.Open();
DataSet ds=new DataSet();string sql="select * from Table1"; 
SqlDataAdapter da=new SqlDataAdapter(sql, conn);
da.Fill(ds); 
dataGridView1.DataSource= ds.Tables[0]; 
conn.Close();

用适配器不需要手写打开关闭的。。。。 --------------------编程问答-------------------- 绑定效率:IDataReader>IList>DataSet --------------------编程问答--------------------
引用 12 楼 chengwen2402163 的回复:
绑定效率:IDataReader>IList>DataSet

我测试了20W的数据,一条条手动绑定上去要差不多2分钟,而用DataSet才几秒钟,差别很大 --------------------编程问答-------------------- 恩 DataSet效率更快点 --------------------编程问答--------------------
引用 13 楼 cjla580 的回复:
引用 12 楼 chengwen2402163 的回复:
绑定效率:IDataReader>IList>DataSet

我测试了20W的数据,一条条手动绑定上去要差不多2分钟,而用DataSet才几秒钟,差别很大

如果绑定就会考虑大数据量,实际运用就是分页+DataReader --------------------编程问答-------------------- 这样绑定也可以的datasource=List(集合) --------------------编程问答--------------------    下DataSet和DataReader的区别,DataSet实际上是一个离线数据集,DataSet不用保持数据库连接,而DataReader需要保持数据库连接,这应当是两者的本质区别,分别对应的ava中的CachedRowSet 和ResultSet,所以两者各有各的用处,DataSet使用前必须填充,所以必须从内存中开辟内存存储DataSet的内容,而DataReader的使用必须使数据库连接有效,但是不必开辟内存存储所有的数据,所以在数据量较小时,使用DataSet可以提升性能,因为所有的数据都在内存中操作。
        但数据量较大时(“较大“的标准不一,一般上千条的数据应当称作较大了吧)使用DataReader就有优势,因为DataReader每次读取都是利用自身保持的数据库连接从数据库中动态读取,不会将大量的数据一下装入内存(也就是所谓的懒装入lazyloding),但缺点是只读,并且是仅向前的,如果你要多次使用同一个数据,还是得先缓存该数据,否则读取一次后将不能重复读取,所以建议就是数据量较少的时候用DataSet,而数据量大时使用DataReader当然,不管使用那个,都应当尽量将查询数量降到最低,只有这样才能做到高效使用,另外,如果你针对每一条数据都需要一个耗时操作的话,要避免使用DataReader,因为数据库连接资源是非常宝贵的,一个服务器连接池中一般就十几个连接罢了,要是每人都保持连接的话,用不了多久就会耗光。
        这里顺便提一下DataGrid的分页功能,网上有很多例子都介绍DataGrid得分页,可是大都是利用DataGrid 本身默认分页功能,这样做有一个很大的缺点,还是针对DataSet的缺点,就是数据量大的时候效率很低,
        Web页本身是无状态的,所以每次访问一个Web页时都会作初始化的操作,所以每次访问的时候,DataGrid 绑定的DataSet都会重复装入内存,并且在内存中查找需要显示的页,然后再次绑定数据,最后才是将数据显示出来,所以大量无用的数据将会被多次装入,这将严重影响性能,
--------------------编程问答-------------------- 我用datasource --------------------编程问答-------------------- 用什么绑定数据,都可以啊,看你自己的需求和设计,前台控件不推荐用Grid的控件进行绑定,不灵活,大数据量的话可以做分页,写存储过程进行分页。 --------------------编程问答-------------------- 数据量大的话建议用Dataset,但如果是小数据量的话,比如绑定下拉列表,就建议一条一条绑定,可以用datareader --------------------编程问答-------------------- 用dataset 吧,通过存储过程来分页,针对大量数据
--------------------编程问答-------------------- dataset效率低吗?我没觉得,不过一般用完要记得dispose()释放资源一下比较好,
dataset作为中间数据集传输是比较统一的方式,很方便啊,不然用datatable也可以
后台
DataSource=dataset
前台
<%#Eval() %>等等
--------------------编程问答-------------------- 个人认为,就是要看你的数据是用在哪方面的,,如果在网页上查询当然会用READER好,因为这样会快很多,如果是公司内部,,那我是觉得用DATASET好,因为访问起来会快很多嘛..哪怕数据据多. --------------------编程问答-------------------- 用DATAREADER好点 --------------------编程问答-------------------- 学习中…………………………………… --------------------编程问答-------------------- 长见识了,我每次用adapter都手动关闭数据库
引用 11 楼 chengwen2402163 的回复:
引用 2 楼 duanfengo7 的回复:
哈哈..楼上的..应该先打开数据库连接吧..
C# code
SqlConnection conn=new SqlConnection("Data Source=.;User ID=sa;Password=sa;Initial Catalog=Test;");
conn.Open();
DataSet ds=new DataSet();string sql="select * from Table1";
SqlDataAdapter da=new SqlDataAdapter(sql, conn);
da.Fill(ds);
dataGridView1.DataSource= ds.Tables[0];
conn.Close();

用适配器不需要手写打开关闭的。。。。
--------------------编程问答--------------------
dateset 绑定后清空下
不喜欢的dateset的话
你可以在数据调用的时候自己写代码  返回datetable或者其他数据集合都行
只要你绑定的时候是个表结构的数据就行了 --------------------编程问答-------------------- 两种都可以 你可以自己写代码一条一条添加
也可以用databind()绑定 --------------------编程问答-------------------- 学习。 --------------------编程问答-------------------- 用List<> --------------------编程问答-------------------- 来过 --------------------编程问答-------------------- 当然是绑定了,还要看具体需求,偶尔也会手动加上几条记录,DataSet占用内存大?你不要一次性把所有数据都装进去不就可以了,数据多了可以写个分页 --------------------编程问答-------------------- 其实LZ提的这个问题其实要看的:
  1.如果显示数据的控件是GirdView这样的二维表格,那么用DATASET就省时多了,但是效率就不是那么高,至少比DATAREADER 低。
  2.如果显示数据的控件比较简单,像List等,那么用DataReader,但是一定要记得打开连接完成功能后,随时关闭连接。万一在连接资源的控制问题还不是很有把握,就把操作数据库的类用单例模式写,这样连接数的问题得到一定的缓解。
  3.其实我比较支持三层结构,用DataReader读数据,将数据保持在对象中,把对象加入泛型传递,这样调用的时候就更加方便了!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,