当使用SqlDataSource控件选择数据时,可以从两个属性:ConnectionString和SelectCommand开始,如下所示:
- 〈asp:SqlDataSource ID="MySourceControlName"
- Runat="server"
- ConnectionString="Server=MyServer ;
- Database=Northwind"
- SelectCommand=" SELECT Fieldl,
- [Field With Space] FROM MyTable" 〉
- 〈/asp:SglDataSource 〉
当使用Windows认证时,可以添加两个认证数据。
- 〈asp:SqlDataSource ID="MySourceControlName"
- Runat="server"
- ConnectionString="Server=MyServer ;
- User ID=MyID;Password=Mypass;
- Database=Northwind"
- SelectCommand=" SELECT Field1,
- [Field With Space] FROM MyTable" 〉
- 〈/asp:SqlDataSource 〉
第一个是前面讨论过的连接字符串,第二个是SelectCommand,用来确定将从SQL Server数据库中提取什么信息。在SelectCommand中,可以使用任何符合语法的SQL SELECT语句,包括在上一章或者附录A中讨论的语句。很多SQL Server管理员都不会允许用户直接访问表。数据库管理员将会在SPROC上创建一些受限制的许可。或者,创建表的视图用来提供表的一部分数据或者对表中可以修改的数据进行限制。连接至视图的语法如下:
- SelectCommand="SELECT * from MyView"
如果表、查询、SPROC或者视图的名称中有空格字符,则应当使用方括号将整个名称包含起来,如下所示:
- SelectCommand="SELECT * from [My View] "
您可能已经注意到了GridView中的Filter属性并且想知道它与在数据源SelectCommand中使用WHERE子句之间有何不同。筛选只用于某些缓冲情况。
有了连接字符串和SelectCommand,就可以创建从SQL Server使用数据的页面了。
试一试#1—— SqlDataSource恐惧简单示例
在本练习中,应该以网格(表)格式从Northwind的SQL版本显示产品的GridView。可以以添加DataSource控件和数据绑定控件的技术开始,这样就能够创建最简单的源代码。然后将会使用一种更快速的开发技术(拖放列名称)。
(1) 请确认已经安装了SSE(如第1章所述),包括样本数据库Northwind。本练习还将涉及到SQL Server或者MSDE。
(2) 创建文件夹ch03,在其中创建一个名为TIO-1-SqlSimple-1.ASPX的文件。通过Menu:View|Toolbox(Ctrl+Alt+X)显示工具箱。请注意工具箱有一个可以展开的Data区域。
(3) 在Design视图中,从工具箱的Data区域中拖放一个SqlDataSource控件至页面。在便捷任务面板上,将数据源配置为新的连接。输入服务器名称(local)\SQLExpress并使用Windows NT认证。选择名为Northwind的数据库并测试连接。单击OK结束。您将会自动返回至Data Source Configuration对话框,单击Next。对本例来说,不需要在配置文件中保存连接字符串;单击Next。选择“Specify columns from a table”并选择表名Products。在Columns列表中,单击ID、Name和Unit Price。单击Next和Test Query,然后单击Finish。这样就完成添加DataSource控件了。
(4) 添加GridView数据绑定控件。在便捷任务面板中,选择SqlDataSource控件,然后关闭便捷任务面板。这样就创建了数据绑定控件。保存并运行页面,页面如下:
- 〈%@ Page Language="VB" % 〉
- 〈!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtmlll/DTD/xhtmlll.dtd" 〉
- 〈script runat="server" 〉
- 〈/script 〉
- 〈html xmlns="http://www.w3.org/1999/xhtml" 〉
- 〈head runat="server" 〉
- 〈title 〉Ch03-Tio#l-SqlSimple-verl〈/title 〉
- 〈/head 〉
- 〈body 〉
- 〈h2 〉
- Chapter 3 TIO #1 SqlSimple verl
- 〈/h2 〉
- 〈form id="forml" runat="server" 〉
- 〈div 〉
- 〈asp:SqlDataSource ID="SqlDataSourcel"
- Runat="server"ProviderName="System.Data.SqlClient"
- ConnectionString="Server=(local)\SQLExpress;
- Integrated Security=True;
- Database=Northwind;
- Persist Security Info=True"
- SelectCommand="SELECT [ProductID],
- [ProductName], [UnitPrice] FROM[Products]" 〉
- 〈/asp:SqlDataSource 〉
- 〈asp:GridView ID="GridViewl" Runat="server"
- DataSourceID="SqlDataSourcel"
- DataKeyNames="ProductID"
- AutoGenerateColumns="False" 〉
- 〈Columns 〉
- 〈asp:BoundField ReadOnly="True"
- HeaderText="ProductID"
- InsertVisible="False" DataField="ProductID"
- SortExpression=" ProductID" 〉
- 〈/asp: BoundField 〉
- 〈asp:BoundField HeaderText="
- ProductName"DataField="ProductName"
- SortExpression="ProductName" 〉
- 〈/asp:BoundField 〉
- 〈asp:BoundField HeaderText="
- UnitPrice" DataField="UnitPrice"
- SortExpression="UnitPrice" 〉
- 〈/asp:BoundField 〉
- 〈/Columns 〉
- 〈/asp:GridView 〉
- 〈/div 〉
- 〈/form 〉
- 〈/body 〉
- 〈/html 〉
(5) 关闭浏览器并查看一下Source视图中的页面。请注意,在页面的〈 form 〉中间有两个控件。SqlDataSource有ConnectionString和SelectCommand。GridView具有一些与SqlDataSource控件的字段绑定的列。
(6) 现在可以使用快速的技术添加第二个表了。将页面保存为TIO-1-SqlSim- ple-2.ASPX。切换至Design视图。在菜单中,依次单击View- 〉Database Explorer。在Data Connections上单击右键并选择Add Connection。与上一步骤一样,您将面对连接属性对话框。输入服务器名称(local)\SQLExpress,使用Windows NT安全,并选择名为Northwind的数据库。测试连接并单击OK以关闭对话框。请注意在数据库浏览窗口中的新项目。
(7) 展开新的(local)\SqlExpress.Northwind.dbo连接,然后展开它的表。展开Categories表。使用Ctrl+单击的方式选择CategoryID、CategoryName和Description字段并将它们拖放至页面的底部。虽然便捷任务面板将为您打开新的GridView,但是可以关闭它。键入F5来运行页面。向下滚动欣赏您仅仅通过从Category表拖放列名就创建出来的页面。以下是版本2的其他源代码。请注意,当拖放列名的时候,您会得到一大组代码,包括在SqlDataSource控件中的一系列参数。
- ...
- 〈asp:SqlDataSource ID="SqlDataSourcel"
- Runat="server"
- 〈asp:GridView ID="GridViewl"
- Runat="server"
- ...
- 〈asp:GridView ID="GridView2" Runat="server"
- DataSourceID="SqlDataSource2"
- DataKeyNames="CategoryID"
- AutoGenerateColumns="False"
- EmptyDataText="There are no data
- records to display." 〉
- 〈Columns 〉
- 〈asp:BoundField ReadOnly="True"
- HeaderText="CategoryID"
- DataField="CategoryID"
- SortExpression="Category ID" 〉
- 〈/asp:BoundField 〉
- 〈asp:BoundField HeaderText="
- CategoryName"DataField="CategoryName"
- SortExpression="CategoryMame" 〉
- 〈/asp:BoundField 〉
- 〈asp:BoundField
- HeaderText="Description" DataField="Description"
- SortExpression="Description" 〉〈/asp:BoundField 〉
- 〈/Columns 〉
- 〈/asp:GridView 〉
- 〈asp:SqlDataSource ID="SqlDataSource2" Runat="server"
- ProviderName="〈%$ ConnectionStrings:
- AppConnectionString2 . ProviderName % 〉"
- ConnectionString="〈%$ ConnectionStrings:
- AppConnectionString2 % 〉"
- SelectCommand="SELECT[CategoryID],
- [CategoryName] ,[Desc- ription] FROM
- [Categories]"
- UpdateCommand="UPDATE[Categories]SET
- [CategoryName]=@CategoryName,
- [Description] = @Description WHERE[CategoryID]=
- @original_CategoryID"
- InsertCommand="INSERT INTO[Categories]
- ([CategoryName],[Description]
- VALUES (@CategoryName, @Description)"
- DeleteCommand="DELETE FROM [Categories]
- WHERE [CategoryID] =
- @original_CategoryID" 〉
- 〈DeleteParameters 〉
- 〈asp:Parameter Type="Int32"
- Name="CategoryID" 〉〈/asp:Parameter 〉
- 〈/DeleteParameters 〉
- 〈InsertParameters 〉
- 〈asp:Parameter Type="String"
- Name="CategoryName" 〉〈/asp:Parameter 〉
- 〈asp: Parameter Type="String"
- Name="Description" 〉〈/asp: Parameter 〉
- 〈/InsertParameters 〉
- 〈UpdateParameters 〉
- 〈asp:Parameter Type="String"
- Name="CategoryName" 〉〈/asp:Parameter 〉
- 〈asp:ParameterType="String"
- Name="Description" 〉〈/asp:Parameter 〉
- 〈asp:Parameter Type="Int32"
- Name="CategoryID" 〉〈/asp:Parameter 〉
- 〈/UpdateParameters 〉
- 〈/asp:SqlDataSource 〉
示例说明#1—— SqlDataSource简单示例
对语法来说,SqlDataSource与我们在第2章所使用的AccessDataSource相差无几。最大的差别就是连接字符串的使用(而不是指定数据文件)。两者相似的意义是对一种控件的知识可以帮助了解其他的数据源控件。
连接字符串向SqlDataSource传递了三个参数:
● SQL Server的名称
● 将要使用的数据库的名称或者视图的名称
● 指示在随后的SSE登录中持续使用Windows认证
不论是对表还是视图来说,如果其名称中包含空格,就必须将名称包括在方括号之中。第二个参数提供了一个符合标准SQL语法的选择命令。
当我们转移至版本2时,使用了VWD的完全功能。通过添加连接至Database Explorer,我们让VWD明白数据库的模式。VWD将会显示表和列名。在拖放列名至页面时,VWD将创建包含了支持的DataSource控件在内的GridView。
【编辑推荐】