<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顯示數(shù)據(jù)
您有兩個頁面上的控件。第一個是AccessDataSource,執(zhí)行連接ADO.NET對象的所有工作,而這些對象連接那些與MDB文件交互的JET引擎。第二個是GridView,用于獲取數(shù)據(jù)并將其格式轉(zhuǎn)化為頁面可以顯示的HTML格式。請注意給每個控件一個有意義的名稱(ID)非常重要。然后必須確定數(shù)據(jù)綁定控件(GridView)使用它的DataSourceID屬性來引用AccessDataSource的ID以便將AccessDataSource作為它的數(shù)據(jù)源。
從查詢中顯示數(shù)據(jù)并不非常困難;在Access中可以不用表名稱而使用查詢名稱。這里有兩個說明。第一,如果表或者查詢的名稱中間有空格,那么必須用方括號將整個名稱括起來。第二,需要用戶輸入(例如,“指定年份的銷售”需要知道是哪一年)的查詢涉及到的技術(shù)不在本書的討論范圍之內(nèi)。
完成前面幾個步驟之后,就可以在頁面上看到從AccessDataSource控件獲得的數(shù)據(jù)顯示了。后面的章節(jié)將詳細介紹GridView,但是本章還將繼續(xù)關注數(shù)據(jù)源控件。
選擇語句中的變量
當在VWD中創(chuàng)建一個數(shù)據(jù)源時,向?qū)笾付ㄐ枰@示的列或者要求創(chuàng)建一條定制的SQL語句。在前面的“試一試”中,簡單地選擇了幾個列??梢砸詭追N不同的方式來指定更復雜的SQL語句:
● 使用交互式的對話框
● 在AccessDataSource向?qū)?由控件中的Configure Data Source便捷任務調(diào)用)中輸入定制的SQL語句
● 在屬性網(wǎng)格中輸入語句
● 直接在Source視圖的標記中輸入語句
對那些從單獨的表中返回一個或者多個列的簡單查詢來說,在Access DataSource向?qū)е羞x擇列是一個首選技術(shù),因為它減少了排版和語法所帶來的錯誤(請參見圖2-3) 。在這個向?qū)е?,可以從Name下拉列表中選擇表或者查詢的名稱。然后您可以通過選擇所有列(*)或者任一組列來選擇表或者查詢中需要的列。如果您單擊了Order By按鈕,那么您就可以在數(shù)據(jù)源中按照任何列來進行排序。如果第一個列有約束,那么將會使用在Then By中選擇的字段。在您從向?qū)е羞x擇選項的時候,請注意SelectCommand的實際SQL語法也同時顯示在一個只讀文本框中。
圖 2-3
利用向?qū)е械腤HERE按鈕可以創(chuàng)建帶有參數(shù)的SQL語句,這部分內(nèi)容將會在第9章中介紹。現(xiàn)在,我們將跳過這個選擇,但是重要的是在部署之前您將使用這些將在本書后面討論的參數(shù)。在一個部署完成的站點中,要避免直接將用戶的輸入與SQL語句連接。忽略參數(shù)問題將會使站點暴露在SQL注入攻擊的危險之中。這種攻擊技術(shù)使用了從用戶輸入而來的假字符使得原來的SQL語句無效,然后用具有破壞性的語句取而代之。可以使用參數(shù)集合來發(fā)送用戶輸入至ADO.NET參數(shù)集合,這樣可以利用集合的功能減少SQL注入的問題。
雖然Configure Data Source向?qū)Ь哂泻芏噙x項可以幫助快速地創(chuàng)建SQL語句,但是有些時候還是需要在標記的SelectCommand中直接輸入(或者修改)SQL語句。AccessDataSource向?qū)г试S進行這些操作。在選擇表、查詢和列的向?qū)ы撁嬷校梢赃x擇“Specify a custom SQL statement or stored procedure”的單選按鈕。在向?qū)ы撁嬷羞x擇這個選項之后單擊Next按鈕將進入另外一個頁面,可以直接在文本區(qū)域中輸入自定義的語句。還可以使用Visual Studio QueryBuilder來可視化地創(chuàng)建自定義語句,所使用的工具與Access QueryBuilder的非常相似。
如果不想使用向?qū)?,那么可以選擇在AccessDataSource控件的屬性網(wǎng)格中輸入自定義的SQL語句,或者可以切換至Source視圖并在AccessDataSource控件標記的SelectCommand屬性中輸入語句。
關于SQL有很多書籍(像本書一樣類型的還有Beginning SQL Programming,ISBN 1-861001-80-0) ,本書在附錄中提供了一個簡要的介紹。如果打算學習SQL語法,那么開始階段可以學習返回記錄的一部分(TOP和DISTINCT)的命令、重命名一個字段(AS)的語法,以及從兩個相關聯(lián)的表返回字段的技術(shù)(JOIN)。下面的練習將探究SQL語句中的一些變量。
試一試 #3—— 更改AccessDataSource中的選擇語句
在本練習中,將要從Northwind的Products表中顯示特定的列和特定的記錄。還將創(chuàng)建一個頁面用來顯示從查詢中獲得的數(shù)據(jù)。請注意在本練習中,選擇規(guī)則已經(jīng)在源代碼之中了。目前,還沒有將用戶輸入作為選項。
(1) 在C:/Websites/BegAspNet2Db/ch02/中創(chuàng)建名為ch02_TIO_3_AlternateSelect- Commands.aspx的文件。
(2) 以Northwind作為ID添加一個AccessDataSource控件并設置MDB為/App_Data/Northwind.mdb。在一系列對話框中,設置Select命令從Products表中獲取所有的字段( “name”=Products)。查看一下Source視圖并注意您所創(chuàng)建的語句,如下所示:
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中,可以在設計器中經(jīng)常瀏覽這些文件,并且MDB文件的正確路徑也已經(jīng)輸入好了。但是,如果您打算輸入自己代碼的話,還需要遵循本節(jié)所介紹的語法。
AccessDataSource控件的DataFile屬性包含的頁面路徑可以是完全限定的(例如以驅(qū)動器盤符開頭)也可以是相對于包含AccessDataSource的頁面的位置而指定的。路徑還可以是相對于應用程序的,即使用URL語法來引用路徑。這個語法將符號(~)替換為應用程序根目錄,比如:~/App_Data/produces.mdb。使用相對于應用程序的路徑可以更加容易地將頁面從一個位置移動到另外一個位置而不破壞對數(shù)據(jù)庫的引用,所以推薦在可能的時候都使用相對于應用程序的路徑。
首先,我們來看完全限定路徑的語法,它包含了MDB文件的整個路徑,以文件所在的計算機驅(qū)動器的根目錄開頭:
<asp:accessdatasource . . . datafile= "C:/WebSites/Webapplication/App_Data/MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="MyDaughterFolder/MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="../MyMdb.mdb"> |
<asp:accessdatasource . . . datafile="~App_Data/MyMdb.mdb> |
新聞熱點
疑難解答