簡介:
         資料庫資料通常都很多,一張幾萬行的列表在網頁上讓使用者翻找一筆資料是很愚蠢的作法。因此打入關鍵字搜尋資料是最常見的資料庫應用,也因為常用其實程式設計已經被充分支援而變得很簡單。本單元就以一個測試用的會員資料表為範例,設計使用不同欄位作資料搜尋的網頁。

下載範例資料庫檔案
資料庫檔案
請先開啟一個新的ASP.NET空網站,新增一個App_Data目錄,下載上述的資料庫檔案(共三個)解壓縮後放在App_Data目錄內。方案總管視窗可以看到這樣:

到資料庫總管展開這些檔案畫面是這樣:

這裡有三種資料庫檔案(內容大致一樣),Database.mdf 就是SQL資料庫,DB.accdb是Access 2007的格式,DB.mdb是Access 2003格式,這些都是常見的微軟系列資料庫,我們藉此單元除了介紹搜尋資料技巧之外,也示範資料庫不同時資料連結方式上的小小差異。

SQL資料庫查詢(使用SqlDataSource)
請建立如下的ASPX網頁:

依序是RadioButtonList, TextBox, Button與一個GridView設定其資料來源為SQL資料庫內的會員資料表(全部欄位)。
搜尋按鍵程式如下:

上面程式的意義是借用已經使用精靈定義好的SqlDataSource1,只修改裡面的SelectCommand指令,去資料庫抓資料。條件是選擇RadioButtonList1選定的項目,內容包含(非全等於)TextBox1輸入的內容。
執行搜尋姓名欄有"陳"的資料結果如下:


Access 資料庫查詢(使用自訂AccessDataSource)
請開一張新網頁,設計界面如下,基本上與前一網頁相同,但是不要設定GridView的資料連結。

搜尋程式碼如下:

在此可以發現通常用設定精靈產生的AccessDataSource也可以用程式碼宣告建立,只需要設定檔案位置與SQL指令即可。
設定好之後將原本沒有連資料庫的GridView的DataSource屬性設為新的AccessDataSource,再執行資料連結DataBind的動作即可!執行程式效果與前一網頁完全相同。

接著請試試看直接將程式碼的"DB.mdb"改成"DB.accdb"就是換成Access 2007格式的資料庫也是一樣OK的!


那麼可以用前面Sql資料庫的方式使用到Access資料庫嗎?當然也可以!
請回到設計頁面用精靈連結到某個Access資料庫,讓頁面產生一個AccessDataSource1,程式碼改成:

一樣OK!

使用ADO.NET連結到Access資料庫
前面使用到DataSource物件時其實已經自動幫我們解決了一個資料連結的問題,就是各種資料庫必須使用到的資料引擎軟體設定,一般稱為Provider翻譯是資料供應者。如果使用ADO.NET的話就必須知道如何指定Provider,前面很多單元我們都用過了SQL的連結字串裡面其實就包含Provider了:
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True
上面的Data Source意義就與Provider相同,這樣寫了之後程式就可以讀懂SQL資料庫了!
至於Access的Provider,2003與2007版是不同的:
Access 2003的Provider是:Microsoft.Jet.OLEDB.4.0
Access 2007的Provider是:Microsoft.ACE.OLEDB.12.0
我們在之前單元已經學會使用ADO.NET讀寫SQL資料庫,下面我們就來試用一下ADO.NET讀取Access資料庫中使用者"TOM"的電話號碼:
先建立一張ASPX網頁,上面只放一個Label
在Page_Load寫程式:

在此必須先匯入OleDb命名空間,如果你預期讀取指令只會讀到一筆資料時可以不必用DataReader物件,直接用指令Cmd執行ExecuteScalar就會回傳一個欄位裡的資料,在此就是TOM的電話號碼了!
執行結果使網頁顯示:0921123456

上面是讀2003版的DB.mdb,如果是讀取2007版的DB.accdb程式碼修改為:

請注意除了檔名Provider也不一樣!
DB.mdb,如果是讀取2007版的DB.accdb程式碼修改為:

請注意除了檔名Provider也不一樣!