dataTable和dataSet的问题,求不吝赐教!

u010993537 2014-12-09 06:10:59
新人,对dataset和datatable不了解,我只知道table是属于set的,但是更深入就不了解了。
比方说:我执行了一条sql语句,得到的数据放到set中,那么我这次得到的这些数据就自动放在
set中的第一个table中了吗?我下次再执行一条语句,得到的数据在set中和第一次的语句有什么关系?
他们会自动分在不同的table中吗?
...全文
222 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dianjixue1 2014-12-12
  • 打赏
  • 举报
回复
引用 12 楼 qldsrx 的回复:
看来你对.NET的数据库连接还不了解,.NET内置连接缓冲池,因此不存在连接数据库的开销。而且一次返回多个表,不利于管理,特别是ORM编程时,现有对象,后有SQL,查询语句基本是动态产生的。而且一次性返回多个表还有一个弊端,就是容易造成查询超时和数据库并发性能降低(锁表时间增加)
知道有连接池,但是数据库链接还是“稀缺”资源。 看了一下MSND关于ADO.NET的数据库读取 ------------------------- DbDataAdapter.Fill 方法 (DataTable) The Fill operation then adds the rows to destination DataTable objects in the DataSet, creating the DataTable objects if they do not already exist. When creating DataTable objects, the Fill operation normally creates only column name metadata. However, if the MissingSchemaAction property is set to AddWithKey, appropriate primary keys and constraints are also created. ....... The overload of Fill that takes DataTable as a parameter only obtains the first result. Use an overload of Fill that takes DataSet as a parameter to obtain multiple results. 总之就是说这个重载方法取到的是DataSet的第一个Table。后面还有举例,说明了这个方法是脱胎于DbDataAdapter.Fill (DataSet)的,DataSet其实已经建立了。 所以: DataTable: SqlDataAdapter da=new SqlDataAdapter(cmd); DataTable dt=new DataTable(); da.Fill(dt); DataSet: SqlDataAdapter da=new SqlDataAdapter(cmd); DataSet ds=new DataSet(); da.Fill(ds,"table1"); 其实是一回事。 DataTable是在查询上比DataSet效率高,但在数据库读取、Xml读取时,是绕不开DataSet的,只能用DataSet接收。 ADO.NET五大对象可没有DataTable 你说ORM编程时,先有对象,后有SQL,查询语句基本是动态产生的,简单的增删改查是如此。真正高效的数据库操作是尽量使用批量操作,一般的涉及大数据量的系统(如ERP),大量的业务是依靠存储过程完成的,因为高效。此时什么查询多表当然正常,至于造成查询超时和数据库并发性锁表的事,完全是看数据库语句的处理能力。
qldsrx 2014-12-11
  • 打赏
  • 举报
回复
引用 11 楼 dianjixue1 的回复:
不知道为什么你会这么说。在实际查询数据库的时候,因为连接数据库是最消耗性能与时间的,为了减少数据库连接的次数,采用一次查询,多个返回的方式也是比较正常的。返回多个Select,自然采用DataDet接收。返回一个Select,也可以采用DataSet接收,没什么不能用的。
看来你对.NET的数据库连接还不了解,.NET内置连接缓冲池,因此不存在连接数据库的开销。而且一次返回多个表,不利于管理,特别是ORM编程时,现有对象,后有SQL,查询语句基本是动态产生的。而且一次性返回多个表还有一个弊端,就是容易造成查询超时和数据库并发性能降低(锁表时间增加)
dianjixue1 2014-12-10
  • 打赏
  • 举报
回复
引用 2 楼 qldsrx 的回复:
执行一条语句的话,就往DataTable中填充,不要去用DataSet,DataSet是用在多条SQL的场合的,填充时可以指定往DataSet中那个表里填充数据,也可以先创建好并填充了数据的DataTable后,再加入到DataSet,推荐使用后者。 实际使用时往往只用到DataTable,几乎不会去考虑使用DataSet,只有在打印报表制作的时候,为了传递一个带外键关系的多DataTable组合,这是才会用到DataSet
不知道为什么你会这么说。在实际查询数据库的时候,因为连接数据库是最消耗性能与时间的,为了减少数据库连接的次数,采用一次查询,多个返回的方式也是比较正常的。返回多个Select,自然采用DataDet接收。返回一个Select,也可以采用DataSet接收,没什么不能用的。
u010993537 2014-12-10
  • 打赏
  • 举报
回复
引用 2 楼 qldsrx 的回复:
执行一条语句的话,就往DataTable中填充,不要去用DataSet,DataSet是用在多条SQL的场合的,填充时可以指定往DataSet中那个表里填充数据,也可以先创建好并填充了数据的DataTable后,再加入到DataSet,推荐使用后者。 实际使用时往往只用到DataTable,几乎不会去考虑使用DataSet,只有在打印报表制作的时候,为了传递一个带外键关系的多DataTable组合,这是才会用到DataSet
我明白了,执行一条语句用datatable就行,那要如何往datatable中填充数据呢?我之前往dataset中填充数据是照着别人的方法, 是这样的方式: Database db = DatabaseFactory.CreateDatabase(connectionString); DbCommand dbCommand = db.GetSqlStringCommand(sb.ToString()); DataSet ds = db.ExecuteDataSet(dbCommand); 但是好像没有ExecuteDataTable方法。请问该怎么做?
我现在在路上 2014-12-10
  • 打赏
  • 举报
回复
DataSet可以包含多个表。如果查询sql是多个语句的话并有返回数据,一个分号算一句
静静-风 2014-12-10
  • 打赏
  • 举报
回复
一个dataset可以包含多个datatable,执行一个表可以用datatable,填充时可以取名字。
dianjixue1 2014-12-10
  • 打赏
  • 举报
回复
刚才 cmd.CommandType = CommandType.StoredProcedure;//存储过程 这一行忘了注销了。删去这一行。
dianjixue1 2014-12-10
  • 打赏
  • 举报
回复
C#通过DataSet接收从数据库获取的数据,可以返回多个DataTable。举个例子:

Select * From A;
Select * From B;
以上语句在SQL中执行,返回2张表。在C#中

            string sql  = "Select * From A;Select * From B;";
              DataSet ds = new DataSet();
            SqlCommand cmd = new SqlCommand(sql, Connection);
            cmd.CommandType = CommandType.StoredProcedure;//存储过程
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds);
            DataTable dt1 = ds.Tables[0];
            DataTable dt2 = ds.Tables[1];
得到的DataSet中,含2个DataTable. 有多个Select 的SQL语句或者存储过程,在C#中调用得到DataSet,其中就含多个DataTable,按照Select的顺序排序。 我比较喜欢将DataSet比喻成一个Excel文件,而DataTable就是里面的单个Sheet
枫0子K 2014-12-09
  • 打赏
  • 举报
回复
可不可以将DataSet理解成是数据库。 DataTable理解成数据表。 DataSet包含很多DataTable,就类似于一个数据库中包含有很多数据表的意思。 执行Sql得到数据放在DataSet中??(Adapter?) 老老实实,数据集用得不多不敢误人子弟。 #2 UP!
exception92 2014-12-09
  • 打赏
  • 举报
回复
datatable组成dataset,这也是它称为数据集的原因。 你可以实例化table,并指定名称,添加到dataset。执行不同的sql语句,会得到不同的结果,当然也是不同的table。 所有加载的数据都是先存到内存中的,你不必担心有关它的资源释放,因为GC会帮你做这些工作。
wind_cloud2011 2014-12-09
  • 打赏
  • 举报
回复
如果执行不同的查询语句,那么在dateset 中的数据是不一样的,是最新的数据, DataSet:数据集。一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable DataTable:数据表。 SqlDataAdapter da=new SqlDataAdapter(cmd); DataTable dt=new DataTable(); da.Fill(dt); DataSet: SqlDataAdapter da=new SqlDataAdapter(cmd); DataSet ds=new DataSet(); da.Fill(ds,"table1"); DataSet和DataTable详解 http://blog.csdn.net/kevin_ysu/article/details/6671393
qldsrx 2014-12-09
  • 打赏
  • 举报
回复
执行一条语句的话,就往DataTable中填充,不要去用DataSet,DataSet是用在多条SQL的场合的,填充时可以指定往DataSet中那个表里填充数据,也可以先创建好并填充了数据的DataTable后,再加入到DataSet,推荐使用后者。 实际使用时往往只用到DataTable,几乎不会去考虑使用DataSet,只有在打印报表制作的时候,为了传递一个带外键关系的多DataTable组合,这是才会用到DataSet
忘丿殇 2014-12-09
  • 打赏
  • 举报
回复
是默认放在DataSet中的第一个Table,下一次执行和上一次没有任何关系~
本课程是PowerBI系列课程之DAX函数专题讲解,包含以下内容 1.  DAX函数基础知识什么是DAX函数数学函数:ABS、DIVIDE、MOD、RAND、ROUND、FIXED等日期和时间函数: CALENDAR、CALENDARAUTO、MONTH、YEAR、DATE、DT等信息函数:USERNAME、USERPRINCIPALNAME、HASONEFILTER、HASONEVALUE、ISFILTERED、ISCROSSFILTERED、ISINSCOPE、ISBLANK、SELECTEDMEASURE、SELECTEDMEASURENAME等逻辑函数:AND、OR、IF、IFERROR、SWITCH、TRUE、FALSE、COALESCE(官方文档含糊不清-结合实例)等关系函数:CROSSFILTER、RELATED、RELATEDTABLE等筛选器函数:FILTER、CALCULATE、ALL、ALLEXCEPT、ALLSELECTED、EARLIER、KEEPFILTERS、REMOVEFILTERS、SELECTEDVALUE、LOOKUPVALUE等父子函数:PATH、PATHCONTAINS、PATHITEM、PATHLENGTH等统计函数:AVERAGE、COUNT、MAX、MIN、SUM等迭代统计函数:AVERAGEX、COUNTX、MAXX、MINX、SUMX、RANKX等表函数: FILTERS 、ADDCOLUMNS、 SELECTCOLUMNS、 CROSSJOIN、 EXCEPT、 GENERATE、 GROUPBY、 SUMMARIZE、 SUMMARIZECOLUMNS、 TOPN、 TREATAS、 UNION、 VALUES、DISTINCT、DATATABLE、NATUALINNERJOIN、NATRUALLEFTOUTERJOIN等文本函数: EXACT、MID、 FIND、 LEN、 REPT、 LOWER、 UPPER、 UNICHAR等时间智能函数:DATEADD、DATESMTD、FIRSTDATE、LASTDATE、SAMEPERIODLASTYEAR等财务函数:2020.7之后发布的,和Excel中财务函数相似,网页和demo pbix简单介绍其他函数:BLANK、ERROR、IFERROR等 DAX函数初体验:Max、Sum、Divide、if、Values等值函数表函数以及表和列的概念DAX函数术语、语法、运算符DAX运算符和引擎中字母大小写问题DAX编程注释和快捷键DAX与Excel函数的共同点和区别(PPT)DAX、xmSQL与SQL表达式的区别(PPT)DAX函数的自学途径 2.  PowerBI中数据建模知识维度建模关系传递和交叉筛选器方向-理解表关系(1v1, 1vM, Mv1,MvM)两个方向上应用安全筛选器关闭关系自动检测新建计算列新建度量值新建计算表:辅助表(五种方式)、日历表数据类型讲解数据格式控制:%、$、千位分隔符、小数位、日期格式Format函数自定义数据格式Convert函数做数据类型转换解决中文数字单位 万 的显示问题Date和DT函数定义固定日期值显示和隐藏列DAX代码分析器阅读DAX表达式方法:从上至下、由内到外(注意Calculate的计算顺序)调试DAX表达式方法:分布输出或VAR输出3.  DAX函数原理 Vertipaq列式数据库原理理解度量值和计算列理解行上下文和筛选上下文:Calculate示意图行上下文中使用VAR替代EARLIERVAR变量在定义时的上下文中计算VAR变量是采用惰性计算(使用时计算)理解扩展表和RELATED函数理解数据沿袭Lineage 4.  开始感知DAX函数的强大DAX函数实现特殊符号的使用DAX函数实现切片器默认当前月或天DAX函数使切片器默认代表无任何选择DAX函数使切片器仅显示有数据的选项DAX函数使切片器反向筛选和计算DAX函数使切片器之间取并集DAX函数使关系中多端的切片器筛选一端的切片器 DAX函数实现年月共同决定数据排序DAX函数实现动态图表标题DAX函数实现动态图表配色和图标DAX函数实现动态纵坐标DAX函数实现动态横坐标5.  理解重点DAX函数重中之重FILTER 和 CALCULATE和CALCULATETABLE详解调节器REMOVEFILTERS和ALL、ALLEXCEPT函数调节器ALL、ALLSELECTED和ISINSCOPE占比分析调节器AllSELECTED和KEEPFILTERS的比较调节器USERELATIONSHIP激活关系调节器TREATAS动态建立关系调节器CROSSFILTER改变筛选器方向重点之ISFILTERED和ISCROSSFILTERED重点之HASONEVALUE和ISINSCOPE的区别重点之表函数SELECTEDCOLUMNS和ADDCOLUMNS重点之表函数NATUALINNERJOIN和NATRUALLEFTOUTERJOIN重点之表函数FILTERS和VALUES比较重点之VALUES和DISTINCT的区别重点之分组函数SUMMARIZECOLUMNS详解重点之函数LOOKUPVALUE vs RELATED vs VLOOKUP 重点之集合函数UNION、INTERSECT、EXCEPT重点之集合函数CROSSJOIN和GENERATE 笛卡尔积重点之值合并、列合并、表合并CONCATENATEX重点之BLANK行产生的原因和BLANK相关函数重点之COALESCE函数处理空重点之FIRSTNOBLANK和FIRSTNOBLANKVALUE函数重点之使用VAR变量表中的列重点之Error和IfError函数6.  实际案例-日期时间和时间智能相关关键点-日期表和事实表关联问题时间智能-同比环比分析时间智能-累计聚合、滚动聚合、移动平均时间智能-期初期末库存分析日期分析-计算任意所选月份的环比日期分析-周的同比环比和周聚合日期分析-指定月份的同比环比和季度环比日期分析-计算季末或季末月份的数据日期分析-趋势图中根据最近月份取TopN日期分析-动态指定某个日期区间分析日期分析-动态任意区间段做数据对比日期分析-实现两个日期列的范围筛选日期分析-按工作日计算日期差日期分析-计算最近两次购买日期差日期分析-根据历史数据做销售预测日期时间函数和时间智能函数使用总结7.  实际案例-DAX函数进阶进阶-解决列排序对计算的影响进阶-实现切片器筛选之间的OR逻辑进阶-矩阵Matrix中高亮显示最大值最小值进阶-DAX列转行 vs 矩阵列转行和逆透视进阶-非日期类型的累计聚合进阶-排名逻辑的4种实现-RANKX详解进阶-分组内排名的实现和理解迭代函数进阶-TopN/BottomN和Others的实现进阶-TopN中实现动态指标进阶-TopN中实现N的动态进阶-分组内动态TopN和Others 进阶-商品折上折-迭代函数SUMX详解 进阶-分析客户购买行为进阶-找出无购买行为的客户进阶-客户购买商品关联度分析 进阶-新客户分析进阶-流失客户分析进阶-回流客户分析进阶-客户购买频次和区间分析进阶-RFM客户价值分析进阶-帕累托分析进阶-盈亏平衡分析报表性能优化思路(PPT)  

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧