<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> |