<asp:AccessDataSource> ID="MySourcName" Runat="server" DataFile="MyMDBName.mdb" SelectCommand="SELECT MyField1, MyField2 FROM MyTable"> </asp:AccessDataSource> |
<html> <head> <title>TIO ch02-1 Display MDB Data</title> <head> <body> <h3>ch02 TIO 2 Demonstration of connection to an MDB source </h3> <body> </html> |
<%@ page language="VB" %> <html> <head><title>ch02 TIO 2 Display MDB Data</title></head> <body> <h3>ch02 TIO 2 Demonstration of Connection to an MDB Source </h3> <form runat="server"> <asp:accessdatasource id="NorthwindProductsAccDataSource" runat="server" selectcommand="Select * From Products" datafile="~/App_Data/Northwind.mdb"> </asp:accessdatasource> <asp:gridview id="NorthwindProductsGridView" runat="server" datasourceid="NorthwindProductsAccDataSource"> </asp:gridview> </form></body></html> |
<asp:accessdatasource id="NorthwindProductsAccDataSource" runat="server" selectcommand="Selcet * From [Sales by Category] " Datafile="~/App_Data/Northwind.mdb"> </asp:accessdatasource> |
(14) 開啟瀏覽器並查看頁面。
範例說明#2—— 連接至MDB並用GridView顯示數據
您有兩個頁面上的控制項。第一個是AccessDataSource,執行連接ADO.NET物件的所有工作,而這些物件連接那些與MDB檔案互動的JET引擎。第二個是GridView,用於獲取資料並將其格式轉換為頁面可以顯示的HTML格式。請注意給每個控制項一個有意義的名稱(ID)非常重要。然後必須確定資料綁定控制項(GridView)使用它的DataSourceID屬性來引用AccessDataSource的ID以便將AccessDataSource作為它的資料來源。
從查詢中顯示資料並不非常困難;在Access中可以不用表名稱而使用查詢名稱。這裡有兩個說明。第一,如果表格或查詢的名稱中間有空格,那麼就必須用方括號將整個名稱括起來。第二,需要使用者輸入(例如,「指定年份的銷售」需要知道是哪一年)的查詢涉及到的技術不在本書的討論範圍之內。
完成前面幾個步驟之後,就可以在頁面上看到從AccessDataSource控制項取得的資料顯示了。後面的章節將詳細介紹GridView,但本章也將繼續關注資料來源控制項。
選擇語句中的變數
當在VWD中建立資料來源時,精靈將會要求指定需要顯示的資料列或要求建立一條客製化的SQL語句。在前面的「試一試」中,簡單地選擇了幾個列。可以以幾種不同的方式來指定更複雜的SQL語句:
● 使用互動式的對話框
● 在AccessDataSource精靈(由控制項中的Configure Data Source便利任務呼叫)中輸入自訂的SQL語句
● 在屬性網格中輸入語句
● 直接在Source視圖的標記中輸入語句
對那些從單獨的表中傳回一個或多個列的簡單查詢來說,在Access DataSource精靈中選擇列是一個首選技術,因為它減少了排版和語法所帶來的錯誤(請參見圖2-3 ) 。在這個精靈中,可以從Name下拉清單中選擇表格或查詢的名稱。然後您可以透過選擇所有列(*)或任一組列來選擇表格或查詢中需要的列。如果您點擊了Order By按鈕,那麼您就可以在資料來源中按照任何欄位來進行排序。如果第一個欄位有約束,那麼將會使用在Then By中選擇的欄位。在您從精靈中選擇選項的時候,請注意SelectCommand的實際SQL語法也同時顯示在一個只讀文字方塊中。
圖2-3
利用精靈中的WHERE按鈕可以建立帶有參數的SQL語句,這部分內容將會在第9章中介紹。現在,我們將跳過這個選擇,但是重要的是在部署之前您將使用這些將在本書後面討論的參數。在一個部署完成的網站中,要避免直接將使用者的輸入與SQL語句連接。忽略參數問題將會使網站暴露在SQL注入攻擊的危險之中。這種攻擊技巧使用了從使用者輸入而來的假字元使得原來的SQL語句無效,然後用具有破壞性的語句取代。可以使用參數集合來傳送使用者輸入至ADO.NET參數集合,這樣可以利用集合的功能來減少SQL注入的問題。
雖然Configure Data Source精靈有許多選項可以幫助快速地建立SQL語句,但有些時候還是需要在標記的SelectCommand中直接輸入(或修改)SQL語句。 AccessDataSource精靈允許進行這些操作。在選擇表格、查詢和列的精靈頁面中,可以選擇「Specify a custom SQL statement or stored procedure」的單選按鈕。在精靈頁面中選擇這個選項之後點選Next按鈕將進入另一個頁面,可以直接在文字區域中輸入自訂的語句。也可以使用Visual Studio QueryBuilder來視覺化地建立自訂語句,所使用的工具與Access QueryBuilder的非常相似。
如果不想使用精靈,那麼可以選擇在AccessDataSource控制項的屬性網格中輸入自訂的SQL語句,或者可以切換到Source視圖並在AccessDataSource控制項標記的SelectCommand屬性中輸入語句。
關於SQL有很多書籍(像本書一樣類型的還有Beginning SQL Programming ,ISBN 1-861001-80-0) ,本書在附錄中提供了一個簡要的介紹。如果打算學習SQL語法,那麼開始階段可以學習回傳記錄的一部分(TOP和DISTINCT)的指令、重新命名一個欄位(AS)的語法,以及從兩個相關聯的表傳回欄位的技術(JOIN)。以下的練習將探討SQL語句中的一些變項。
試一試#3—— 更改AccessDataSource中的選擇語句在本練習中,將要從Northwind的Products表中顯示特定的列和特定的記錄。也會建立一個頁面用來顯示從查詢中獲得的資料。請注意在本練習中,選擇規則已經在原始碼之中了。目前,還沒有將使用者輸入作為選項。
(1) 在C:WebsitesBegAspNet2Dbch02中建立名為ch02_TIO_3_AlternateSelect- Commands.aspx的檔案。
(2) 以Northwind為ID新增一個AccessDataSource控制項並設定MDB為App_DataNorthwind.mdb。在一系列對話方塊中,設定Select指令從Products表格中取得所有的欄位( “name”=Products)。查看Source視圖並注意您所建立的語句,如下所示:
SELECT * FROM Products |
<%@ page language="VB" %> <html> <head runat="server"> <title>ch02 TIO 3 Alternate Select Conimands</title> </head> <body> <h3>ch02 TIO 3 Alternate Select Coinmands</h3> <form runat="server"> <asp:accessdatasource id="NorthwindAccDataSource" runat="server" selectcommand="SELECT * FROM Products" datafile=" ~/App_Data/Northwind.mdb" > </asp:accessdatasource> <asp:gridview id="GridViewl" runat="server" datasourceid="NorthwindAccDataSource"> </asp:gridview> </form> </body> </html> |
SELECT * FROM [Products] WHERE (CategroyID=3) |
<asp:accessdatasource id="NorthwindAccDataSource" runat="server" selectcommand="SELECT * FROM [Products] WHERE (CategoryID = 3) " Datafile="~App_Data/Northwind.mdb"> </asp:accessdatasource> |
SELECT * FROM Products WHERE ProductID = 12 SELECT * FROM Products WHERE ProductName = 'Northwoods Cranberry Sauce' SELECT * FROM Products WHERE ProductID <11 SELECT * FROM Products WHERE ProductID <11 ORDER BY ProductName Ascending SELECT * FROM Products WHERE SupplierID = 6 OR SupplierID = 8 SELECT * FROM Products WHERE SupplierID = 24 AND UnitPrice > 10 |
MDB檔案位置中的變數
MDB檔案保存在硬碟中的各種實體位置:與Web頁相同的資料夾、Web頁下的子資料夾或機器中的其他資料夾等。在Visual Web Developer中,可以在設計器中經常瀏覽這些文件,而MDB文件的正確路徑也已經輸入好了。但是,如果您打算輸入自己程式碼的話,您還需要遵循本節所介紹的語法。
AccessDataSource控制項的DataFile屬性所包含的頁面路徑可以是完全限定的(例如以磁碟機代號開頭)也可以是相對於包含AccessDataSource的頁面的位置而指定的。路徑也可以是相對於應用程式的,即使用URL語法來引用路徑。這個語法將符號(~)替換為應用程式根目錄,例如:~App_Dataproduces.mdb。使用相對於應用程式的路徑可以更容易地將頁面從一個位置移動到另一個位置而不破壞對資料庫的引用,所以建議在可能的時候都使用相對於應用程式的路徑。
首先,我們來看完全限定路徑的語法,它包含了MDB檔案的整個路徑,以檔案所在的電腦磁碟機的根目錄開頭:
<asp:accessdatasource . . . datafile= "C:WebSitesWebApplicationApp_DataMyMdb.mdb"> |
<asp:accessdatasource . . . datafile="MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="MyDaughterFolder/MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="../MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="~App_Data/MyMdb.mdb> |