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