数据集的结构定义与实例的关系(转)
2024-07-21 02:22:31
供稿:网友
数据集的结构定义与实例的关系
www.yescnet.com cnet中文网
在.net的数据库开发中,不可避免的要使用到数据集(dataset),在阅读msdn学习数据集使用的时候,由于没有清晰的区分数据集的定义和实例,在操作中,总是这里做一个数据集,那里做一个数据集,绕来绕去,却不知所以然,待全部完成后,仔细思考一下, 才发现此数据集非彼数据集,其中一部分是数据集的定义,另一部分才是充满数据的数据集实例。因此为方便大家的理解,在这里将数据集的定义与实例分析一遍,以期有助于各位看客的.net的多层数据库开发。此文章中的例子程序是vs.net studio beta 2中的msdn 中的walkthrough(别跟我说你找不到):webforms application walkthroughs 中的vb类的。如果你有什么没看懂的,可以参考一下。
下面伴随例子程序,分析说明在不同的情况下,这些很容易搞混淆的数据集的定义和实例。
首先,我们新建一个vb工程。工程类型为visual basic projects,在模板选择asp.net web,命名为mywebform。
在visial studio.net 为你产生了许多文件之后,在工程中添加一个component。然后在component中添加一个sqldataadapter或oledataadapter,根据向导,连接上数据库,配置好数据库适配器。数据库适配器是直接面对数据库的,所有的对数据库的操作的命令比如select, update, insert, delete等等,一般都是指派给适配器。适配器配置好以后,你会发现菜单上多了数据的菜单项,将其点开,会发现有“生成数据集”的菜单项。点击后,弹出生成数据集的窗口,你可以选择新建数据集,数据集的名字是dscustomers,此时的数据集实际上是指一个数据集的定义,也就是一个用xml格式表示的,文件名为'dscustomers.xsd'的数据集定义文件。注意它并不包含任何的数据库中的数据,而只是描述一下将来如果哪个数据集(包含真正的数据,也就是实例)是用它来描述的,那么其中的数据是一些什么含义。选中要添加到数据集中的表,确认最后的‘将此数据集添加到设计器’前的复选框没有打勾。之所以要将此处的勾去掉,是因为它是决定是否要在设计器上建立一个数据集实例的选项,要验证这一点,你可以试一试打上勾是什么样子。如果你用默认的dataset1的数据集名称,效果很不明显,因为数据集定义的文件名叫‘dataset1.xsd’,而添加到设计器上的数据集实例取名也叫'dataset1',令人疑惑,如果你自己将数据集的名称改为'dsmydataset',那么你会发现生成的数据集定义的文件名称叫'dsmydataset.xsd',而添加到设计器的数据集实例叫'dsmydataset1',此时就很明显的表明,设计器上的数据集是一个可以容纳实际数据的数据集实例。我们因为不需要在设计器上将数据提取出来,所以不要在此选项前打勾。数据集生成之后,我要提醒一下各位,当你双击打开xsd文件看到的画面和msdn中的截图很不一样。我一直没搞懂msdn上的截图是怎么做出来的,它为什么会有两个elements,而我按照它的方法总是只出来一个element。在这里,我转悠了好久,直到确认我的并没错,其余也不想管msdn是否错了。
我们需要的此component中添加一个方法,是专门用来将传入的数据集实例填充的。编码是这样的:
public sub filldataset(byval dset as dscustomers)
sqldataadapter1.fill(dset)
end sub
将component保存。
接下来,我们要在界面上添加数据集实例。点开webform1.aspx,从工具箱中的数据分类里拖拽一个dataset控件,弹出添加数据集窗口。选中第一个选钮,然后选择我们刚才建立的数据集定义dscustomers,确定即可。于是webform1的下面的控件箱中有了一个以1结尾的数据集dscustomers1,注意这个1,它表明这是一个使用先前的数据集定义的数据集实例。此时,它里面还没有数据,我们用鼠标双击webform1.aspx的页面,打开代码编辑窗口。要想将数据集实例中填满数据, 我们可以利用上一个步骤建立的component。首先申明dim mycomp as component1。由于component属于本工程,所以一切正常,如果component属于别的工程或直接在网上,那么,你必须先引用它。接下来,我们用componet中的方法填充webform1.aspx中的数据集实例。编码是:
mycomp.filldataset(dscustomer1)。好了,因为这个方法的传入参数是用dscustomer定义的,而现在往里传的webform1.aspx上的实例dscustomer1也是用dscustomer定义的,所以dscustomer1可以传入component,用component 中的数据适配器进行填充。
经过以上的分析,相信各位应该不会再将数据集的定义和实际使用的数据集实例搞混了。