由於本人最近在做C/S架構軟體的開發,剛上手有很多方面不懂的看了這篇文章感覺很受用就複製過來了,非常感謝原作者,以下是原文。
在日常開發中,為了編寫資料的增加、更新、修改、刪除等功能而不得不面對枯燥的代碼,做重複又重複的工作。.NET 2.0正式版的發布,對我們程式開發人員來說無疑是一件很大的喜事,Visual Studio 2005 的一些新的增強功能和ADO.NET 2.0的新特性讓我們開發高可伸縮的多層資料庫應用程式更加簡單和快捷。
在.NET 1.1下就可以使用強型別資料集,可是在Visual Studio 2003裡開發起來還是有一些不方便,在Visual Studio 2005裡對DataSet的設計檢視做了很大的改進,因為ADO.NET 2.0增加了TableAdapter對象,所以現在也可以在DataSet設計檢視裡添加DataTable的表適配器。以前的typedDataSets只是一些資料實體(啞對象,只有屬性的類)的集合,並不能很方便的自我管理持久化,以及資料完整性驗證等。現在可以很方便的實現這些。
下邊通過一個例子來詳細介紹如何通過vs2005來產生強型別DataSet簡化開發流程,產生延展性的多層資料庫應用程式。
首先建立立一個Web網站項目,在[方案總管]→[添加新項] →[資料集],命名為Authors.xsd,由於強型別DataSet需要放到App_Code目錄,如果此時專案檔中沒有App_Code目錄,IDE會提示是否建立,我們選擇"是"即可。
此時IDE會自動開啟我們剛才建立好的Authors.xsd檔案,並且開始運行TableAdapter設定精靈,如果Web.Config沒有資料庫連結字串,此時我們需要建立立一個串連:選擇[建立連結] →[Microsoft SQL Server] →[選擇系統內建的pubs資料庫] →[將建立立的連結字串儲存到應用程式設定檔中]。
在接下來的選擇命令類型的時候,IDE出來三個選項來供使用者選擇訪問呢資料庫的形式:
1、 使用SQL語句,如果是單個表,嚮導可以自動產生 Insert,Update和Delete語句。本例子也是使用的這種方法。
2、 建立新的預存程序。同樣如果是單個表,嚮導可以自動產生 Insert,Update和Delete語句。
3、 使用現有預存程序。需要為每一個命令選擇相應的現有預存程序。
我們這裡選擇[使用SQL語句] →[查詢產生器] →[authors表,選擇所有列],此時查詢產生器會自動給我們產生 SQL語句(SELECT authors.* FROM authors)。[進階選項],可以選擇是否產生Insert,Update和Delete語句,使用開放式並發來防止並發衝突,重新整理資料表,用來驗證 Insert和Update語句,為了能夠更清晰的介紹使用方法,我們這裡全部都不選擇,而讓我們以後根據需要自行添加。[選擇要產生的方法] ,我們只需要使用[返回DataTable],其餘的選項的對號去掉。
此時建立嚮導會自動給我們產生"Select語句","資料表的映射",以及"Get方法"。我們建立的過程就結束了。這是我們發現DataSet.xsd會自動產生一個authors表和一個包含Get方法的資料集authorsTableAdapter。
同樣,在我們建立好的資料表[authorsTableAdapter]右鍵→添加查詢,參照上邊的方法產生DeleteQuery(刪除),InsertQuery(增加),UpdateQuery(更新)、SelectDetail(返回詳細結果,使用Select(返回行)選項,產生一個只包括一條資料的資料集) 以及ScalarQuery(返回資料統計)。
以下是產生的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的資料來源,此時我們會發現在配置的時候系統已經認出來我們剛才建立的強型別DataSet了,[選擇業務對象] →[authorsTableAdapters.authorstableAdapter] →[定義資料方法]分別選擇Select,Update,Insert,Delete的方法,即我們剛才建立的DeleteQuery,InsertQuery,UpdateQuery,SelectDetail,ScalarQuery和系統產生的GetDate]。此時配置ObejctDataSource就完工了。
把GridView的DataSourceID設定成ObjectDataSource,此時我們就已經建立好了完整的一個資料編輯功能。看是不是很簡單。
當然,我們在進行企業開發的時候,更習慣於在後台編輯,現在我就給出在後台進行手工編輯的代碼:
//資料繫結部分
if (!Page.IsPostBack)
{
authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
//authorsTableAdapter就是我們建立的強型別的
GridView1.DataSource = ta.GetData();
GridView1.DataBind();
}
//刪除資料
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
ta.DeleteQuery(GridView1.DataKeys[e.RowIndex].Value);
}
//返回單條資料
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());
//返回資料統計
authorsTableAdapters.authorsTableAdapter ta = new authorsTableAdapters.authorsTableAdapter();
Response.Write(ta.ScalarQuery().ToString());
至此,我們不難發現,2005給我們的開發提供了飛躍性的改變。我們可以通過強型別資料集很方便快速的進行多層構架開發,並且提高開發速度。