|
數(shù)據(jù)集的結(jié)構(gòu)定義與實例的關(guān)系 www.yescnet.com CNET中文網(wǎng)
在.net的數(shù)據(jù)庫開發(fā)中,不可避免的要使用到數(shù)據(jù)集(dataset),在閱讀msdn學(xué)習(xí)數(shù)據(jù)集使用的時候,由于沒有清晰的區(qū)分?jǐn)?shù)據(jù)集的定義和實例,在操作中,總是這里做一個數(shù)據(jù)集,那里做一個數(shù)據(jù)集,繞來繞去,卻不知所以然,待全部完成后,仔細(xì)思考一下, 才發(fā)現(xiàn)此數(shù)據(jù)集非彼數(shù)據(jù)集,其中一部分是數(shù)據(jù)集的定義,另一部分才是充滿數(shù)據(jù)的數(shù)據(jù)集實例。因此為方便大家的理解,在這里將數(shù)據(jù)集的定義與實例分析一遍,以期有助于各位看客的.net的多層數(shù)據(jù)庫開發(fā)。此文章中的例子程序是vs.net studio beta 2中的msdn 中的walkthrough(別跟我說你找不到):webforms application walkthroughs 中的vb類的。如果你有什么沒看懂的,可以參考一下。
下面伴隨例子程序,分析說明在不同的情況下,這些很容易搞混淆的數(shù)據(jù)集的定義和實例。 首先,我們新建一個vb工程。工程類型為Visual Basic Projects,在模板選擇ASP.NET Web,命名為MyWebForm。 在visial studio.net 為你產(chǎn)生了許多文件之后,在工程中添加一個component。然后在component中添加一個sqlDataAdapter或OleDataAdapter,根據(jù)向?qū),連接上數(shù)據(jù)庫,配置好數(shù)據(jù)庫適配器。數(shù)據(jù)庫適配器是直接面對數(shù)據(jù)庫的,所有的對數(shù)據(jù)庫的操作的命令比如select, update, insert, delete等等,一般都是指派給適配器。適配器配置好以后,你會發(fā)現(xiàn)菜單上多了數(shù)據(jù)的菜單項,將其點開,會發(fā)現(xiàn)有“生成數(shù)據(jù)集”的菜單項。點擊后,彈出生成數(shù)據(jù)集的窗口,你可以選擇新建數(shù)據(jù)集,數(shù)據(jù)集的名字是dsCustomers,此時的數(shù)據(jù)集實際上是指一個數(shù)據(jù)集的定義,也就是一個用xml格式表示的,文件名為'dsCustomers.xsd'的數(shù)據(jù)集定義文件。注意它并不包含任何的數(shù)據(jù)庫中的數(shù)據(jù),而只是描述一下將來如果哪個數(shù)據(jù)集(包含真正的數(shù)據(jù),也就是實例)是用它來描述的,那么其中的數(shù)據(jù)是一些什么含義。選中要添加到數(shù)據(jù)集中的表,確認(rèn)最后的‘將此數(shù)據(jù)集添加到設(shè)計器’前的復(fù)選框沒有打勾。之所以要將此處的勾去掉,是因為它是決定是否要在設(shè)計器上建立一個數(shù)據(jù)集實例的選項,要驗證這一點,你可以試一試打上勾是什么樣子。如果你用默認(rèn)的dataset1的數(shù)據(jù)集名稱,效果很不明顯,因為數(shù)據(jù)集定義的文件名叫‘dataset1.xsd’,而添加到設(shè)計器上的數(shù)據(jù)集實例取名也叫'dataset1',令人疑惑,如果你自己將數(shù)據(jù)集的名稱改為'dsMyDataset',那么你會發(fā)現(xiàn)生成的數(shù)據(jù)集定義的文件名稱叫'dsMyDataSet.xsd',而添加到設(shè)計器的數(shù)據(jù)集實例叫'dsMyDataset1',此時就很明顯的表明,設(shè)計器上的數(shù)據(jù)集是一個可以容納實際數(shù)據(jù)的數(shù)據(jù)集實例。我們因為不需要在設(shè)計器上將數(shù)據(jù)提取出來,所以不要在此選項前打勾。數(shù)據(jù)集生成之后,我要提醒一下各位,當(dāng)你雙擊打開xsd文件看到的畫面和msdn中的截圖很不一樣。我一直沒搞懂msdn上的截圖是怎么做出來的,它為什么會有兩個elements,而我按照它的方法總是只出來一個element。在這里,我轉(zhuǎn)悠了好久,直到確認(rèn)我的并沒錯,其余也不想管msdn是否錯了。 我們需要的此component中添加一個方法,是專門用來將傳入的數(shù)據(jù)集實例填充的。編碼是這樣的: Public Sub FillDataSet(ByVal dSet As dsCustomers) SqlDataAdapter1.Fill(dSet) End Sub 將component保存。 接下來,我們要在界面上添加數(shù)據(jù)集實例。點開webform1.aspx,從工具箱中的數(shù)據(jù)分類里拖拽一個dataset控件,彈出添加數(shù)據(jù)集窗口。選中第一個選鈕,然后選擇我們剛才建立的數(shù)據(jù)集定義dsCustomers,確定即可。于是webform1的下面的控件箱中有了一個以1結(jié)尾的數(shù)據(jù)集dsCustomers1,注意這個1,它表明這是一個使用先前的數(shù)據(jù)集定義的數(shù)據(jù)集實例。此時,它里面還沒有數(shù)據(jù),我們用鼠標(biāo)雙擊webform1.aspx的頁面,打開代碼編輯窗口。要想將數(shù)據(jù)集實例中填滿數(shù)據(jù), 我們可以利用上一個步驟建立的component。首先申明dim mycomp as component1。由于component屬于本工程,所以一切正常,如果component屬于別的工程或直接在網(wǎng)上,那么,你必須先引用它。接下來,我們用componet中的方法填充webform1.aspx中的數(shù)據(jù)集實例。編碼是: mycomp.fillDataSet(dsCustomer1)。好了,因為這個方法的傳入?yún)?shù)是用dsCustomer定義的,而現(xiàn)在往里傳的webform1.aspx上的實例dsCustomer1也是用dsCustomer定義的,所以dsCustomer1可以傳入component,用component 中的數(shù)據(jù)適配器進行填充。 經(jīng)過以上的分析,相信各位應(yīng)該不會再將數(shù)據(jù)集的定義和實際使用的數(shù)據(jù)集實例搞混了。
|