VS2005中的強類型DataSet簡化開發(fā)
.NET 2.0的發(fā)布,對我們程序開發(fā)人員來說無疑是一件很大的喜事,Visual Studio 2005 的一些新的增強功能和ADO.NET 2.0的新特性讓我們開發(fā)高可伸縮的多層數(shù)據(jù)庫應(yīng)用程序更加簡單和快捷。
在.NET 1.1下就可以使用強類型數(shù)據(jù)集,可是在Visual Studio 2003里開發(fā)起來還是有一些不方便,在Visual Studio 2005里對DataSet的設(shè)計視圖做了很大的改進,因為ADO.NET 2.0增加了TableAdapter對象,所以現(xiàn)在也可以在DataSet設(shè)計視圖里添加DataTable的表適配器。以前的typedDataSets只是一些數(shù)據(jù)實體(啞對象,只有屬性的類)的集合,并不能很方便的自我管理持久化,以及數(shù)據(jù)完整性驗證等。現(xiàn)在可以很方便的實現(xiàn)這些。
下邊通過一個例子來詳細介紹如何通過Visual Studio 2005來生成強類型DataSet簡化開發(fā)流程,生成可伸縮性的多層數(shù)據(jù)庫應(yīng)用程序。
首先新建立一個Web網(wǎng)站項目,在[解決方案資源管理器]→[添加新項] →[數(shù)據(jù)集],命名為Authors.xsd,由于強類型DataSet需要放到App_Code目錄,如果此時項目文件中沒有App_Code目錄,IDE會提示是否創(chuàng)建,我們選擇"是"即可。
此時IDE會自動打開我們剛才建立好的Authors.xsd文件,并且開始運行TableAdapter配置向?qū)В绻鸚eb.Config沒有數(shù)據(jù)庫連結(jié)字符串,此時我們需要新建立一個連接:選擇[新建連結(jié)] →[Microsoft SQL Server] →[選擇系統(tǒng)自帶的pubs數(shù)據(jù)庫] →[將新建立的連結(jié)字符串保存到應(yīng)用程序配置文件中]。
在接下來的選擇命令類型的時候,IDE出來三個選項來供用戶選擇訪問呢數(shù)據(jù)庫的形式:
1、 使用SQL語句,如果是單個表,向?qū)Э梢宰詣由?Insert,Update和Delete語句。本例子也是使用的這種方法。
2、 創(chuàng)建新的存儲過程。同樣如果是單個表,向?qū)Э梢宰詣由?Insert,Update和Delete語句。
3、 使用現(xiàn)有存儲過程。需要為每一個命令選擇相應(yīng)的現(xiàn)有存儲過程。
我們這里選擇[使用SQL語句] →[查詢生成器] →[authors表,選擇所有列],此時查詢生成器會自動給我們生成 SQL語句(SELECT authors.* FROM authors)。[高級選項],可以選擇是否生成Insert,Update和Delete語句,使用開放式并發(fā)來防止并發(fā)沖突,刷新數(shù)據(jù)表,用來驗證 Insert和Update語句,為了能夠更清晰的介紹使用方法,我們這里全部都不選擇,而讓我們以后根據(jù)需要自行添加。[選擇要生成的方法] ,我們只需要使用[返回DataTable],其余的選項的對號去掉。
此時創(chuàng)建向?qū)詣咏o我們生成"Select語句","數(shù)據(jù)表的映射",以及"Get方法"。我們創(chuàng)建的過程就結(jié)束了。這是我們發(fā)現(xiàn)DataSet.xsd會自動生成一個authors表和一個包含Get方法的數(shù)據(jù)集authorsTableAdapter。
同樣,在我們建立好的數(shù)據(jù)表[authorsTableAdapter]右鍵→添加查詢,參照上邊的方法生成DeleteQuery(刪除),InsertQuery(增加),UpdateQuery(更新)、SelectDetail(返回詳細結(jié)果,使用Select(返回行)選項,生成一個只包括一條數(shù)據(jù)的數(shù)據(jù)集) 以及ScalarQuery(返回數(shù)據(jù)統(tǒng)計)。
以下是生成的SQL語句,需要手工修改成自己需要的代碼:
- DeleteQuery:DELETE FROM [authors] WHERE ([au_id] = @Original_au_id)
- InsertQuery:INSERT into authors (au_lname,au_fname,phone,address,city,state,zip,contract) values (@au_lname,@au_fname,@phone,@address,@city,@state,@zip,@contract)
- UpdateQuery :UPDATE authors set au_lname=@au_lname,au_fname=@au_fname,phone=@phone,
- address=@address,city=@city,state=@state,zip=@zip,contract=@contract where au_id=@au_id
- SelectDetail:SELECT authors.* FROM authors where au_id=@au_id
- ScalarQuery :SELECT COUNT(*) FROM authors
打開Default.aspx,并添加一個GridView控件,并且添加一個ObjectDataSource控件,配置ObjecctDataSource的數(shù)據(jù)源,此時我們會發(fā)現(xiàn)在配置的時候系統(tǒng)已經(jīng)認出來我們剛才建立的強類型DataSet了,[選擇業(yè)務(wù)對象] →[authorsTableAdapters.authorstableAdapter] →[定義數(shù)據(jù)方法]分別選擇Select,Update,Insert,Delete的方法,即我們剛才建立的DeleteQuery,InsertQuery,UpdateQuery,SelectDetail,ScalarQuery和系統(tǒng)生成的GetDate]。此時配置ObejctDataSource就完工了。
把GridView的DataSourceID設(shè)置成ObjectDataSource,此時我們就已經(jīng)建立好了完整的一個數(shù)據(jù)編輯功能。看是不是很簡單。
當(dāng)然,我們在進行企業(yè)開發(fā)的時候,更習(xí)慣于在后臺編輯,現(xiàn)在我就給出在后臺進行手工編輯的代碼:
- //數(shù)據(jù)綁定部分
- if (!Page.IsPostBack)
- {
- authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
- //authorsTableAdapter就是我們建立的強類型的
- GridView1.DataSource = ta.GetData();
- GridView1.DataBind();
- }
- //刪除數(shù)據(jù)
- protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
- {
- authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
- ta.DeleteQuery(GridView1.DataKeys[e.RowIndex].Value);
- }
- //返回單條數(shù)據(jù)
- authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
- DataTable dt = ta.SelectDetail(Request.QueryString["id"].ToString());
- if (dt.Rows.Count >0)
- Response.Write(dt.Rows[0]["address"].ToString());
- //返回數(shù)據(jù)統(tǒng)計
- authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
- Response.Write(ta.ScalarQuery().ToString());
至此,我們不難發(fā)現(xiàn),Visual Studio 2005給我們的開發(fā)提供了飛躍性的改變。我們可以通過強類型數(shù)據(jù)集很方便快速的進行多層構(gòu)架開發(fā),并且提高開發(fā)速度。
【編輯推薦】