现在的位置: 首页 > 综合 > 正文

Scott Mitchell 的ASP.NET 2.0数据教程之四十七使用SqlDataSource控件检索数据

2013年10月01日 ⁄ 综合 ⁄ 共 5047字 ⁄ 字号 评论关闭
  

前言:
 这是Scott Mitchell 的ASP.NET 2.0数据教程系列的第四十七篇,前四十六篇已经由论坛上的各位达人翻译出来了,不过第四十七到五十三篇我找了一下好象没有人翻译。小弟也是新手,找不到中文译文,只有自己硬者头皮上,加上英语水平有限,理解有误的地方请嘴下留情!另外如果哪位高人知道第四十七到五十三篇的中文翻译地址,麻烦回复一下,自己翻译起来实在是太慢了。再次谢过了!
本文英文原版以及代码下载:

Scott Mitchell ASP.NET 2.0数据教程之四十七使用SqlDataSource控件检索数据

使用SqlDataSource控件检索数据

 

在前面的教程里,我们用ObjectDataSource控件充分的将表现层和数据访问层(DAL)分开来。在这篇教程里我们看看怎样在一个表现层和数据访问层区分的不是很严格的简单程序中使用SqlDataSource控件。

导言:

   到目前为止,我们探讨的教程是由表现层,业务逻辑层和数据访问层构成的层次体系结构。数据访问层和业务逻辑层分别在教程第一和第二章提到。在Displaying Data With the ObjectDataSource 这篇教程里,我们探讨了怎样用ASP.NET 2.0的新控件--ObjectDataSource控件在表现层展示数据

  本教程到目前为止用这种层次结构来处理数据。然而绕过这种体系结构,通过直接把数据查询和业务逻辑放在Web页面上,也可以达到直接在ASP.NET页面上访问,插入,更新,删除数据库数据的目的。对十分庞大或者复杂的应用程序而言,使用层次结构对程序的成功和可维护性是很重要的。然而对很简单的程序来说,没有必要使用层次体系结构。

  ASP.NET 2.0 提供了5个内建的数据源控件, SqlDataSource控件, AccessDataSource控件, ObjectDataSource控件, XmlDataSource控件, SiteMapDataSource控件。SqlDataSource控件能直接从关系型数据库中访问和更新数据,包括Microsoft SQL ServerMicrosoft Access, Oracle, MySQL等数据库。在本章以及接下来的3章教程里面,我们将探讨如何用SqlDataSource控件来查询和筛选数据库数据,包括插入,更新和删除。

1ASP.NET 2.0 5个内建的数据源控件

比较ObjectDataSource控件和 SqlDataSource控件

   从理论上说,ObjectDataSource控件和 SqlDataSource控件都是作为访问数据的一种代理。就象在教程Displaying Data With the ObjectDataSource中讨论的那样,可以在ObjectDataSource控件中设置展示数据的数据类型,以及用来选择,插入,更新和删除数据所调用的方法。一旦完成了ObjectDataSource控件的设置,GridView, DetailsView, DataList等数据Web控件便可以通过绑定ObjectDataSource控件调用其Select(), Insert(), Delete(), Update() methods方法。

   虽然SqlDataSource控件具有和SqlDataSource控件同样的功能,但使用SqlDataSource控件时,我们必须提供详细的数据库连接字符串,以及用来执行选择,更新,插入,删除数据的ad-hoc SQL查询

或存储过程。当调用SqlDataSource控件的Select(), Insert(), Update(), and Delete() 方法时,SqlDataSource控件连接到数据库,并传递适当的SQL查询。下图展示了这些方法如何连接数据库,传递查询和返回结果。

2  SqlDataSource控件充当访问数据库的代理

 

注意:在本章教程中我们主要关注如何从数据库获得数据,在后面的

Inserting, Updating, and Deleteing Data with the SqlDataSource

Control 教程中,我们将讨论如何通过设置SqlDataSource控件以支持插入,更新和删除数据。

SqlDataSource 控件和 AccessDataSource 控件

除了 SqlDataSource 控件外,ASP.NET 2.0 还包AccessDataSource 控件。这两种不同的控件使很多开发者误以为AccessDataSource 控件主要是被设计来与Microsoft Access数据库打交道,SqlDataSource 控件主要是被设计来来与Microsoft SQL Server打交道。实际情况是,SqlDataSource 控件可以与几乎所有.NET能访问的关系型数据库打交道。包括任何 OleDb ODBCcompliant data stores,比如:Microsoft SQL Server, Microsoft Access, Oracle, Informix, MySQL, and PostgreSQL等。

SqlDataSource 控件和 AccessDataSource 控件的唯一区别在于AccessDataSource 控件的数据库连接信息只需要提供Access数据库文件的访问路径。而SqlDataSource 控件则需要提供完整的连接字符串。

第一步:创建 SqlDataSource 页面

在我们探讨用SqlDataSource控件直接操作数据库数据之前,让我们先花些时间在我们的站点项目里添加这些本节里和下三节里需要的ASP.NET页面。首先添加一个名为SqlDataSource的文件夹,在里面添加下列页面,并配置为使用Site.master母板页。

Default.aspx

Querying.aspx

ParameterizedQueries.aspx

InsertUpdateDelete.aspx

OptimisticConcurrency.aspx

 

3:为SqlDataSource相关教程添加页面

类似在其它文件夹里,EditInsertDelete文件夹里的Default.aspx将列出这些教程章节。记得用户控件提供这个功能。因此,从解决方案资源管理器中拖拽一个这个用户控件到页面的设计视图,从而添加它到Default.aspx页面

4:将用户控件添加到Default.aspx页面

最后把这4个页面加入站点地图中。打开Web.sitemap文件并且把下列代码加在“Adding Custom Buttons to the DataList and Repeater”siteMapNode标记之后:

<siteMapNode url="~/SqlDataSource/Default.aspx"

    title="Using the SqlDataSource Control"

    description="Work directly with database data using the

SqlDataSource control.">

    <siteMapNode url="~/SqlDataSource/Querying.aspx"

title="Retrieving Database Data"

        description="Examines how to query data from a database that

can then be displayed  through a data Web control."/>

    <siteMapNodeurl="~/SqlDataSource/ParameterizedQueries.aspx"

        title="Parameterized Queries"

        description="Learn how to specify parameterized WHERE

clauses in theSqlDataSource's SELECT statement." />

    <siteMapNode url="~/SqlDataSource/InsertUpdateDelete.aspx"

        title="Inserting, Updating, and Deleting Database Data"

        description="See how to configure the SqlDataSource to include INSERT, UPDATE, and DELETE statements." />

    <siteMapNode url="~/SqlDataSource/OptimisticConcurrency.aspx"

        title="Using Optimistic Concurrency"

        description="Explore how to augment the SqlDataSource to

include support for optimistic concurrency." />

</siteMapNode>

 

5:更新站点地图使之包含新的页面

第二步:添加并设置 SqlDataSource控件

  在SqlDataSource文件夹中打开Querying.aspx页面,切换到设计试图。从工具箱中拖一个SqlDataSource控件到设计器中,设置其ID 为 ProductsDataSource。和ObjectDataSource一样,SqlDataSource不产生任何的声明标记,所以现在在页面上看起来就象一个灰色的方块。点击SqlDataSource控件的智能标签,点“Configure Data Source”链接,进入数据源配置向导。

6:在智能标签里点击“设置数据源”链接。

ObjectDataSource控件和 SqlDataSource控件的配置向导有些许不同,但最终目的都是相同的:详细的说明了如何从数据库获取,插入,更新和删除数据。ObjectDataSource控件明确指定了要访问的数据库,并提供了要使用的SQL查询声明或存储过程的详细情况

向导的第一步是选择要访问的数据库,在下拉列表中包含了放在App_Data 文件夹中的数据库,以及添加到服务器资源管理器的数据连接节点中的数据库。一旦我们将一个连接到App_Data文件夹中的NORTHWIND.MDF数据库的连接字符串添加到项目的Web.config 文件中,这个连接字符串就会出现在下拉列表的选项。如下图,选中它,点“下一步”。

7:从下拉列表里选择NORTHWINDConnectionString

 选择数据库后,向导转入“如何从数据库检索数据”界面。有2种方式:第一种指定自定义SQL语句或存储过程,第二种是指定来自表或视图的列。

 注意:我们先探讨使用“指定来自表或视图的列”选项的实例,稍后再探讨用“自定义SQL语句或存储过程”选项的实例。

8是我们点击“指定来自表或视图的列”单选按钮时的画面,这里我们选择Products表,返回ProductID, ProductName和UnitPrice 列。完成选择后,在底部的方框内将显示SQL语句: SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]

8:从表Products返回数据。

 

完成上述设置后,点“下一步”按钮,进入测试查询界面,在这里可以测试上一步所设置的查询的结果。点击“测试查询”按钮,执行查询。

9:点击“测试”,从SELECT 查询检索数据。

最后,点“完成”按钮完成向导。

ObjectDataSource一样,SqlDataSource的向导设置只是完成了对SqlDataSource控件属性的赋值而已,即ConnectionString 属性和SelectCommand 属性。完成设置之后,我们的SqlDataSource控件代码应该和下面的差不多:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"

    ConnectionString="<%$ ConnectionStrings:NORT

抱歉!评论已关闭.