您的位置:首页 > 编程语言 > ASP

[翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十七:使用SqlDataSource控件查询数据

2007-08-15 12:31 1156 查看
ASP.NET 2.0中操作数据:使用SqlDataSource控件查询数据

英文原版 | 本教程的代码(C#) | 翻译目录 | 原文目录

导言

到目前为止,我们所做的教程都使用了一个包含表示层、业务逻辑层以及数据访问层的分层架构。在第一节教程(创建一个数据访问层)中,我们讲解了数据访问层(DAL),第二节教程(创建一个业务逻辑层)中,我们又讲解了业务逻辑层。从教程“使用ObjectDataSource展现数据”开始,我们看到了如何在这个架构里面,通过使用ASP.NET2.0中新出现的ObjectDataSource控件在表示层展示数据。

所有的这些教程都是使用这样的架构来操作数据的,当然,我们也可以绕过这个架构,直接在ASP.NET页面上访问、插入、更新以及删除数据库中的数据。要这样做的话,你需要将特定的数据库查询以及业务逻辑直接放到网页中。对于一个很大的或者很复杂的应用程序来说,设计、实现以及使用一个分层的架构,对其是否能够顺利完成以及日后的可升级性、可维护性都将是非常重要的。不过,对于一个非常简单的、就一个人用的小程序来说,开发一个所谓健壮的架构兴许就不那么必要了。

ASP.NET2.0提供了五个内建的数据源控件——SqlDataSourceAccessDataSourceObjectDataSourceXmlDataSource以及SiteMapDataSource。SqlDataSource可以用来直接访问和修改关系型数据库中的数据,比如Microsoft SQL Server、Microsoft Access、Oracle、MySQL……等等。在本教程以及接下来的三个教程中,我们将讲解如何使用SqlDataSource,如何用它来查询数据库中的数据,以及如何用它来插入、更新、删除数据。

<siteMapNode url="~/SqlDataSource/Default.aspx"
2 title="Using the SqlDataSource Control"
3 description="Work directly with database data using the SqlDataSource control.">
4
5 <siteMapNode url="~/SqlDataSource/Querying.aspx" title="Retrieving Database Data"
6 description="Examines how to query data from a database that can then be
7 displayed through a data Web control."/>
8
9 <siteMapNode url="~/SqlDataSource/ParameterizedQueries.aspx"
10 title="Parameterized Queries"
11 description="Learn how to specify parameterized WHERE clauses in the
12 SqlDataSource's SELECT statement." />
13
14 <siteMapNode url="~/SqlDataSource/InsertUpdateDelete.aspx"
15 title="Inserting, Updating, and Deleting Database Data"
16 description="See how to configure the SqlDataSource to include INSERT, UPDATE,
17 and DELETE statements." />
18
19 <siteMapNode url="~/SqlDataSource/OptimisticConcurrency.aspx"
20 title="Using Optimistic Concurrency"
21 description="Explore how to augment the SqlDataSource to include support for
22 optimistic concurrency." />
23
24</siteMapNode>

更新了Web.sitemap之后,让我们花一点点的时间在浏览器中看看这个教程的网站。现在,左边的菜单就有了关于编辑、插入以及删除的教程的项目了。

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
2 ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
3 SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]">
4</asp:SqlDataSource>

ConnectionString属性提供了如何连接到数据库的相关信息。这个属性可以被赋予一个完整的、硬编码的连接字符串,也可以指向Web.config中的连接字符串。要引用Web.config中的连接字符串,需要使用语法<%$ expressionPrefix:expressionValue %>。一般来说,expressionPrefix就是“ConnectionStrings”, expressionValue则是Web.config中<connectionStrings> 节中的连接字符串的名字。不过,这个语法还可以用来引用<appSettings>元素或资源文件中的内容。关于这个语法的详细信息,请参见ASP.NET 表达式概览

SelectCommand属性给出了一个用于返回数据的SQL语句或是存储过程。

第三步:添加一个数据Web控件,并绑定SqlDataSource

在SqlDataSource被配置好之后, 它就可以被绑定到一个数据Web控件上了,比如GridView或者DetailsView。在本教程中,我们就用一个GridView来显示数据吧。从工具箱中拖一个GridView 到页面上,并绑定ProductsDataSource(在GridView的智能标签中的下拉列表里面选择一个叫做ProductsDataSource的SqlDataSource就可以完成这个任务了)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
2 DataKeyNames="ProductID" DataSourceID="ProductsDataSource"
3 EnableViewState="False">
4 <Columns>
5 <asp:BoundField DataField="ProductID" HeaderText="ProductID"
6 InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
7 <asp:BoundField DataField="ProductName" HeaderText="Product Name"
8 SortExpression="ProductName" />
9 <asp:BoundField DataField="UnitPrice" HeaderText="Price"
10 SortExpression="UnitPrice" DataFormatString="{0:c}"
11 HtmlEncode="False" />
12 </Columns>
13</asp:GridView>

通过浏览器访问这个页面. 就像图十一所展示的那样,GridView列出了每一个产品的ProductID、ProductName以及UnitPrice的值。

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
2FROM Categories
3 INNER JOIN Products ON
4 Categories.CategoryID = Products.CategoryID

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
2 DataKeyNames="ProductID" DataSourceID="ProductsWithCategoryInfoDataSource"
3 EnableViewState="False">
4 <Columns>
5 <asp:BoundField DataField="ProductID" HeaderText="ProductID"
6 InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
7 <asp:BoundField DataField="ProductName" HeaderText="ProductName"
8 SortExpression="ProductName" />
9 <asp:BoundField DataField="CategoryName" HeaderText="CategoryName"
10 SortExpression="CategoryName" />
11 </Columns>
12</asp:GridView>
13
14<asp:SqlDataSource ID="ProductsWithCategoryInfoDataSource" runat="server"
15 ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
16 SelectCommand="
17 SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
18 FROM Categories
19 INNER JOIN Products ON Categories.CategoryID = Products.CategoryID">
20</asp:SqlDataSource>



图十五:GridView显示了每一个产品的ID、名称以及相应的分类

总结

在本教程中,我们看到了如何通过SqlDataSource控件进行查询并显示数据。跟ObjectDataSource一样,SqlDataSource就像一个代理一样,提供了一个明确的方法以访问数据。它的属性指明了需要连接的数据库以及用来执行的SQL SELECT查询,它们也都可以通过属性窗口或配置数据源向导来进行指定。

本教程中我们所给出的SELECT查询将返回查询得到的所有记录。然而,SqlDataSource控件可以含有一个带参数的WHERE子句,其值可以通过编程的方式指定或从某个指定的源自动获取。我们将在下一节中介绍如何创建和使用参数化查询。

编程愉快!

关于作者

Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用微软Web技术。Scott是个独立的技术咨询顾问,培训师,作家,最近完成了将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电邮为mitchell@4guysfromrolla.com,也可以通过他的博客http://ScottOnWriting.NET与他联系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐