close

 這是我的文章備份,原文在此:DataSet與ObjectDataSource #1,簡單的小範例
http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/04/5296.aspx



以前在ASP.NET 1.x版,搭配VS.NET 2003的時候,

就算要連結資料庫,都要拉進一個 SqlConnection的控制項到畫面裡頭。

那時要做 DataSet的步驟也差不多。

自從ASP.NET 2.0開始(VS 2005),作法有些改變。我們必須加入一個資料集(DataSet),然後透過 ObjectDataSource控制項來使用它。

這一部份原本打算在書本裡提及,但書本上限600頁(我最後寫到840幾頁,實在塞不下去了),因為成為遺珠。

先把一些範例公布在我的Blog上面,作為補償。

在ObjectDataSource這一部份,市面上的中文書,就屬章立民老師在碁峰出版的那本書,最詳盡了。我在之前文章也有推薦過。

以下就是我的小範例,題目--- 計算 test這個資料表裡面的資料總筆數?

各位可以跟以前的程式做一個比對。這樣的寫法跟以前有何差異?

圖片一,首先「新增項目」,增加一個資料集(DataSet)。接下來就是一連串的精靈畫面,不用怕,跟著做。

圖片二,透過 ObjectDatasource控制項,我們可以自訂 TableAdapter。這個範例我們用簡單的SQL指令試試看就好。

因為ASP.NET 2.0以後(包含3.5版),市面上的書很少提起ADO.NET,很多初學者沒學過ASP或是.NET 1.x版,因此對於DataSet / DataAdapter完全沒概念。

以我為例,一路走來,對於版本每次的演化都有遇見。所以學起新東西還算快。

廣告一下,我的新書---ASP.NET專題實務(文魁出版) 是目前ASP.NET 3.5版,少數有完整介紹ADO.NET與完整範例的書,各有一章)

 

 完成上面的精靈畫面後,就會出現下面的畫面。

所謂的 DataSet,就是把某一個Table常用的一些功能,事先做好一些函數備用。

將來可以直接呼叫它,有點類似資料庫的Stored Procedure是事先寫好的SQL指令。

  

 P.S.   畫面右下方的SQL指令寫得很爛,千萬別模仿。   使用 *符號,效能都很差!

=====================================================================

完成上面的設定後,我們開始寫程式了。

HTML畫面很簡單,只有一個Button按鈕、文字輸入方塊(TextBox)而已。

這支程式比較特別的地方,是在「後置程式碼」的部份,請看下去。

各位看看底下的後置程式碼,我們剛剛自訂的DataSet與 TableAdapter

還有剛剛設定好的函數 --  test_count(),已經跟VS 2008配合起來,

在 Intellisense裡面,會自動出現我們「事先設定好的函數名稱」

畫面上的Intellisense,還有 Delete / Fill / Insert / Update,這些都是ObjectDataSource事先完成的。

這樣做,有什麼優點呢?

舉例來說,在程式設計上,大家都很著重在寫程式,因此團隊裡面每個人對於SQL指令的用法都有差異,

不同的SQL指令,效率效率也差別很大。

以這個範例來說,要找出 test資料表的總筆數(共有幾筆資料)

  • 有人會透過SQL指令的 count() 來做。  Count(*) Count(欄位名稱) 這兩個寫法,效率就差很多~
  • 有人會執行 Select * from test,然後用程式去找結果,例如:DataReader的方法。
  • ......等等其他方法。

與其讓每一個人都用自己的方式來寫程式,

這個做法可以讓大家「共用」同一個函數來完成。換個角度來想,也是一種好處。

因此,整個程式變得很精簡。完整程式碼如下:

'----自己寫的----
Imports System
Imports System.Web.Configuration
Imports System.Data
Imports System.Data.SqlClient
'----自己寫的----

Partial Class test_ADO_NET_DataSet_test
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim Conn As New SqlConnection("資料庫的連結字串")

            Dim testAdapter As New DataSet1TableAdapters.testTableAdapter

            TextBox1.Text = testAdapter.test_count().ToString

    End Sub
End Class
 

比較用功的讀者可能會發現一件事,上面的程式碼,並沒有開啟連線(Conn.Open())、也沒有關閉連線(Conn.Close())?

想不到我竟然會犯了這麼大的錯誤?

NO~~~您錯了!!!!  

DataSet會透過 DataAdapter來執行SQL指令,透過 .Fill()與 .Update()來取出資料與回寫資料。

DataAdapter會在適當的時候,自動開啟、自動關閉資料庫的連線。所以我們不必手動處理之。

廣告一下,看吧!有學過 ADO.NET,真的不一樣喔!我的新書有加強這一部份,不會讓你失望!

    要自己寫 ADO,NET的程式,市面上的書,我寫的這一本算比較詳細......)

=====================================================================

完成後,執行結果如下。

 各位如果對於 VS 2005 / VS 2008幫我們完成的資料集(DataSet)有興趣的話,可以到 /app_code目錄底下找找看  .xsd檔案。

是一個XML檔,裡面寫了每一個函數要執行的動作,很有參考價值喔。

...................................................................................................................................................................................................................

新書上市-- ASP.NET專題實務(文魁出版 / P8187)。懇請支持,謝謝。

2008/八月份 天瓏書局排行榜前十名 

arrow
arrow
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()