新云软件园:请安心下载,绿色无病毒!

软件提交最近更新热门排行
您现在的位置:首页››编程教学››.NET编程››数据库相关››office2014

在Microsoft Office System中使用ADO.NET数据集(三)

2005-06-11 18:58作者:佚名来源:本站整理浏览:404 评论:0
到这一步,你的DataSet应该完全被来自数据库中的数据填充了,因此你可以关闭数据库连接对象。尽可能早的关闭连接永远是一个好的编程习惯,这样你可以将它释放给其他应用程序。另一方面,如果当前程序将要立即使用这个连接——也许是为了创建另一个DataSet,你可以保持它为打开状态以避免重建该连接带来的额外开销。

注意:如果你在该应用程序中对每个连接重用完全相同的连接字符串——包括嵌套空间,默认情况下,ADO.NET将共用同一个连接。因此在大多数情况下,关闭和重新打开一个连接只会导致非常小的开销(可以忽略不计)。

我们可以说,现在你的DataSet已经填充完毕,并且准备好以供使用,同时从数据库断开了连接。在许多应用程序程序中,这些就是你所需要的,但是你可能希望创建多种关系,用以建立数据的分级特性。创建这些关系需要使用DataRelation类。

重点 即使你在你的数据库中定义了相关的完整性关系,你也没有方法在一个DataSet中自动重建这些关系——换句话说,你必须手工创建这些关系。



创建一个数据关系需要引用DataSet中现存表两个以上的列。下面的代码中使用parent和child DataColumn对象来在两个表中的主键与外键之间添加关系。一旦你实例化这些对象(parent和child对象),你就可以实例化DataRelation对象,并传递给其一个名字,用以标识关系属于parent 和child 对象。

代码还设置关系的Nested(嵌套)属性为 True.当你读取该DataSet的XML表示时,child元素并不会自动嵌套到它的parent对象中。相反,所有的parent元素先被列出来,所有的child元素紧随其后,并按层次进行分组。虽然种非常有用的结构是罕见的,但是Nested属性嵌套了数据。

最后一步,添加新的DataRelation对象到该DataSet对象的Relations集合中。注意到,代码中是使用表的名字作为引用表识的。你可以将它们替换为你自己的表的名字。

 'Add the relationships to the DataSet

 'Customers -> Orders

 Dim parent As DataColumn = _

   ds.Tables("Customers").Columns("CustomerID")

 Dim child As DataColumn = ds.Tables("Orders").Columns("CustomerID")

 Dim sqlRel As New DataRelation("Customer Orders", parent, child)

 sqlRel.Nested = True

 ds.Relations.Add(sqlRel)

该过程的最后一步将DataSet对象的XML架构和数据保存到硬盘上。使用DataSet时这一步不是必须的,但是在“将DataSet作为XML导入到Excel 2003 Worksheet”节,你将看到如何使用它们。

大多数.NET Frameword对象支持序列化成一维或多维,但是,DataSet对象使序列化变得更为简单——使用WriteXml和WriteXmlSchema方法就能做到。当你调用这两个方法使,需要传递相应磁盘文件的名字给每个方法,数据就保存到相应的文件中。你可以提供完整路径,但是这段代码将文件保存到应用程序的bin文件夹。在这里有用到表名称作为引用标志。

‘可选步骤:将XML数据和架构保存为磁盘文件

 If bSaveSchema Then

   'Places the file in this app's bin directory

   ds.WriteXmlSchema("Customers.xsd")

   ds.WriteXml("Customers.xml")

 End If

该过程将完整的DataSet对象返回给调用它的过程。

 Return ds

End Function

为单一实体创建DataSet

当你在一个客户端应用程序中创建一个DataSet时,ADO.NET将来自数据库的所有数据通过网络传递到客户端,并尽最大可能将必需数据完全填充到这个DataSet中。

如果你的表有数百万条记录,将会发生什么?你希望通过网络传递尽可能少的数据填充到DataSet中,例如,你很可能仅仅希望得到单一某个客户的信息。在Northwind数据库中,数据访问层的类方法GetCustomerDataSet就是实现这个功能的,它使用用户从窗体上的下拉列表框中所选择的CustomerID作为参数来选定某个特定客户。

你需要的代码与GetDataSet中的代码极为类似,但是有一些重要的不同点。首先,你现在需要过滤数据。也就是说,你必须过滤表中的数据,以便只返回必需的记录,并且对任何相关表都要执行这些操作,但是若有多个表一般就会返回多个记录,例如:筛选出客户已经下的订单的某个(一个客户可能下0个或多个订单)。

你可以对DataSet中所容纳的数据执行筛选和排序,但是这意味着整个数据集都将穿越网络。一个好的方式是在数据库端执行筛选和排序,并且只返回必需的记录。

你可以通过SqlParameter对象执行筛选。这些参数应用于代码中的每个动态SQL语句,注意,执行这样的方法与调用相应的存储过程是等效的。

下面的代码填充DataSet中的Customers表。注意到现在的SQL语句有一个WHERE子句,没有ORDER BY子句——对单一某个记录是不必排序的。该SqlCommand对象和前面一样的方式实例化,但是现在它需要设置@CustID参数。SqlParameter对象用参数名——@CustID,和参数类型——nchar(5)实例化。然后它设置参数的Value属性为传递到该过程的值。最后一步是添加这个新参数叨命令对象的Parameters集合中,然后调用数据适配器的Fill(同前面的步骤)。SQL语句需要多少参数,你就可以添加多少参数对象。

Dim sql As String = "SELECT CustomerID, CompanyName, ContactName, " _

 ContactTitle, Address, City, Region, PostalCode, Country, " _

 & "Phone, Fax FROM Customers WHERE CustomerID = @CustID"

Dim sqlCmd As New SqlCommand(sql, sqlCnn)

Dim sqlParam As New SqlParameter("@CustID", SqlDbType.NChar, 5)

sqlParam.Value = sCustID

sqlCmd.Parameters.Add(sqlParam)

Dim sqlDA As New SqlDataAdapter(sqlCmd)

sqlDA.Fill(ds, "Customers")

另一些表以几乎完全相同方法填充,除了某些被过滤的表需要合并到Orders表中,这样CustomerID才可以访问。

每个子表需要重用SqlParameter对象,因为它们都需要过滤CustomerID,而不仅仅只Products表用到。你希望返回数据库中的所有产品,而不管该产品是否被订购。因此,该代码的这个部分调用了Parameters集合的Clear方法。  

Tags:责任编辑:cvery
顶一下(62)
89.86%

    文章评论 新云下载QQ群:① 7551827使用手机微信搜索 微信号:xinyunshouyou 关注我们 有更多惊喜!!

    请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!
      验证码:     登录   注册
    网友评论

    关注新云安卓游戏网

    中彩票的人 www.365581.com-彩天地是什么东西| 网易彩票www.177249.com| www.63817.com-足彩竞猜胜负任9| www.964218.com-福彩官网开奖号码| www.344797.com-彩票联盟是什么| www.183257.com-青海西宁快三走势图| www.829422.com-彩678app网址| www.932290.com-七星彩三字定位| 金彩www.986jc.com| www.pz21.cc-彩票手机软件| www.593816.com-七彩影院可以投屏吗| www.717936.com-彩虹有哪几种颜色| www.811295.com-中国福利彩试机号| www.906252.com-黑彩代理会判多少年| www.974089.com-168时时彩下载| www.ic5.cc-内蒙体彩11选五| www.rg05.com-168彩票真的吗| www.39387.com-七星彩4个号多少钱| www.17.me-大彩鲸网页版| www.415103.com-代做彩票流量| www.523281.com-彩种已停售-| www.612561.com-幸福彩大乐透推荐号| www.713863.com-重庆时时彩单双推算| www.822033.com-国产3d彩漫-| www.913758.com-万彩网靠谱吗| www.976908.com-焦作孟州结婚彩礼| www.ga97.com-浙江快乐彩-| www.06721.com-3d彩票图3月份呢| www.712605.com-彩票做私庄吃了几万| www.521512.com-体彩中了怎么兑奖| www.413318.com-足彩改期奖金怎么算| www.602757.com-体彩刮刮乐7保底| www.802693.com-彩c16ccm-| www.974747.com-福彩购买-| www.02sp.com-微博彩票不能提现| www.410035.com-体彩飞鱼玩法| www.74xq.com-体彩彩票怎么买| www.368394.com-超级七星彩下载安装| www.470081.com-金博时时彩源码| www.551164.com-竞彩网重庆-| www.681210.com-要彩票-| www.030085.com-大地彩票官方下载| www.997219.com-足彩任九场中奖查询| www.mj72.com-彩之家论坛-| 99彩票www.372779.com| www.744771.com-手机赌彩平台最安全| www.874352.com-彩票三地-| www.974625.com-网上怎么买体彩| www.vr6.com-马来西亚彩票骗局| www.vv00.com-如何看彩票的k线| www.967.date-杏彩网页登陆网址| www.897208.com-彩票最长的龙有多长| www.987694.com-中彩网电脑版| www.pg0.com-韩国快三平台| www.rq32.com-体彩5分钟一次| www.x32.pw-体彩双旦毒胆| 大赢家彩票www.529411.com| www.254823.com-网上时时彩彩票骗局| www.225998.com-中彩神万能倍投器| www.723509.com-福建彩票大奖| www.822354.com-顶呱呱彩票-| www.214086.com-人人竞彩彩票| www.979554.com-二元彩票网双色球| www.55ss.cc-体彩赛车-| www.4935.top-七星彩梦秘解图解梦| www.09292.cc-广东福彩助手| www.198334.com-湖北彩票开奖结果| www.53rg.com-凯里体彩中心| www.2251.vip-梦到买彩票中大奖了| www.927531.com-app彩票坊-| www.989277.com-风凰微彩彩站下载| www.3yv.com-凤凰彩票是真实的吗| www.74pn.com-利奥平台彩票| www.1231.site-正版电脑彩报| www.18597.cc-滴滴跟单足球竞彩网| www.153422.com-七乐彩拖胆投注表| www.2278.com-福彩中心怎么改| www.230279.com-时时彩诈骗最新案| www.318688.com-赢发彩票下载| www.81dj.cc-福临门彩票-| www.68928.cc-盈彩吧是不是骗人的| www.383553.com-彩票有一块钱的吗| www.849907.com-彩礼钱一般包括什么| www.k14.com-腾讯体育彩票下载| www.45wf.com-上海福利彩票网‘| www.914.cm-念佛求财中彩票| www.c60.in-今天体彩排三开奖号| www.922644.com-彩8在线安全么| 多乐彩票www.422626.com| www.62853.cc-足球竞彩36o| www.039255.com-彩票理财-| www.191260.com-上海快三开奖助手| www.306165.com-河北体彩选五遗漏| www.45393.com-2019彩票新闻| www.130425.com-福彩2元刮刮乐下载| www.116024.com-胜负彩滚存怎么分配| www.188075.com-开彩票店经历| www.842.date-星际彩票app下载| www.129223.com-幸运彩吧福彩3d| www.254375.com-彩票发展下线技巧| www.341922.com-中国合法的彩票| www.547730.com-369彩票官网下载| www.13680.com-竞彩足球哪里买| www.xm97.com-彩神争霸8彩票登录| www.302012.com-四川快三基本走势图| www.373711.com-巩义福彩-| www.192100.com-福彩3d和值表图片| www.266275.com-河北福彩排七走势图| www.569.online-兼职刷彩是什么| www.6531.org-六爻预测3d彩票| www.338234.com-中奖彩票图片最新| www.43266.cc-鸿运快三彩票| www.6372.xyz-胜负彩媒体预测| www.320822.com-全民足球彩票app| www.53295.cc-逆袭分分彩计划下载| www.74767.com-彩票专家推荐号| www.65618.com-彩票中奖恶搞生成| www.854811.com-竞彩足球盈亏数据| www.713120.com-今日夺彩app| www.843998.com-fbi足彩技术| www.734566.com-足彩19020期| www.544569.com-刮彩票怎么中奖| www.632859.com-福彩2d地区-| www.565627.com-天牛3d彩吧总汇图| www.642519.com-体彩中奖多少要交税| www.704007.com-竞彩网比分澳| www.865931.com-彩票123是真的吗| www.793061.com-邢台福彩兑奖地址| www.871101.com-江苏快3彩票骗局| www.8601.top-电视剧彩票-| www.799330.com-福彩一体机购买| www.119335.com-玩赚彩票app下载| www.237880.com-福彩官网app| www.d08.cc-牛彩测速登录| www.62fu.com-双色球彩开奖结果| www.4413.me-彩票中奖倍数怎么算| www.924015.com-世界彩票大奖排名| www.57xb.com-中彩那天生字ppt| www.761462.com-好彩自然来什么意思| www.562765.com-黑客修改私彩数据库| www.638142.com-竞彩足球暂停销售| www.698794.com-彩铅绘画技巧| www.790503.com-彩票复试注数计算器| www.861822.com-腾讯十分彩开奖网站| www.922222.com-365彩票软件下载| www.967514.com-找彩票导师带赚| www.dg93.com-瑞彩祥云彩票靠谱吗| www.sg87.com-彩票娱乐十大平台| www.500722.cc-1寸彩照什么颜色| www.123055.cc-谦喜彩票网址| www.977476.com-哪种彩票app好| www.21hs.com-时时彩网页数据导入| www.1411.xyz-网络博彩推广犯法吗| 彩乐汇www.585116.com| www.mz50.com-快三平台是违法的吗| www.v58.xyz-大乐透彩票开将| www.44wp.com-52彩票计划网| www.095.com-缤果彩票网登录| www.4216.biz-七彩互联网科技| www.7797.org-足彩最佳投注方式| www.879133.com-天天福彩当天重播| www.954985.com-瑞彩祥云的幸运快三| www.267010.com-中国体彩下载| www.334329.com-彩票网站不给提现|