SqlDataSource Web 服务器控件概述

更新:2007 年 11 月

通过 SqlDataSource 控件,可以使用 Web 服务器控件访问位于关系数据库中的数据。其中可以包括 Microsoft SQL Server 和 Oracle 数据库以及 OLE DB 和 ODBC 数据源。您可以将 SqlDataSource 控件与数据绑定控件(如 GridViewFormViewDetailsView 控件)一起使用,用极少代码或甚至不用代码来在 ASP.NET 网页上显示和操作数据。

本主题包括:

  • 背景

  • 代码示例

  • 类参考

背景

SqlDataSource 控件使用 ADO.NET 类与 ADO.NET 支持的任何数据库进行交互。这类数据库包括 Microsoft SQL Server(使用 System.Data.SqlClient 提供程序)、System.Data.OleDbSystem.Data.Odbc 和 Oracle(使用 System.Data.OracleClient 提供程序)。使用 SqlDataSource 控件,可以在 ASP.NET 页中访问和操作数据,而无需直接使用 ADO.NET 类。只需提供用于连接到数据库的连接字符串,并定义使用数据的 SQL 语句或存储过程即可。在运行时,SqlDataSource 控件会自动打开数据库连接,执行 SQL 语句或存储过程,返回选定数据(如果有),然后关闭连接。

将 SqlDataSource 控件连接至数据源

配置 SqlDataSource 控件时,将 ProviderName 属性设置为数据库类型(默认为 System.Data.SqlClient)并将 ConnectionString 属性设置为连接字符串,该字符串包含连接至数据库所需的信息。连接字符串的内容根据数据源控件访问的数据库类型的不同而有所不同。例如,SqlDataSource 控件需要服务器名、数据库(目录)名,还需要如何在连接至 SQL Server 时对用户进行身份验证的相关信息。有关有效连接字符串的信息,请参见 SqlConnectionOracleConnectionOleDbConnectionOdbcConnection 类的 ConnectionString 属性主题。

如果不在设计时将连接字符串设置为 SqlDataSource 控件中的属性设置,则可以使用 connectionStrings 配置元素将这些字符串集中作为应用程序配置设置的一部分进行存储。这样,就可以独立于 ASP.NET 代码来管理连接字符串,包括使用 Protected Configuration 对这些字符串进行加密。下面的示例演示如何使用存储在名为 MyNorthwind 的 connectionStrings 配置元素中的连接字符串连接到 SQL Server Northwind 示例数据库。

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          runat="server"
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          runat="server"
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          DataSourceMode="DataReader"
          ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          runat="server"
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>

使用 SqlDataSource 控件发出数据命令

可为 SqlDataSource 命令指定四个命令(SQL 查询):SelectCommandUpdateCommandDeleteCommandInsertCommand。每个命令都是数据源控件的一个单独的属性。对于每个命令属性而言,可以为要执行的数据源控件指定 SQL 语句。如果数据源控件与支持存储过程的数据库相连,则可以在 SQL 语句的位置指定存储过程的名称。

可以创建参数化的命令,这些命令包括要在运行时提供的值的占位符。下面的示例演示一个典型的参数化 SQL Select 命令:

Select CustomerID, CompanyName From Customers Where City = @city

可以创建参数对象,以指定命令在运行时获取参数值的位置,如从其他控件中、从查询字符串中等等。或者,可以通过编程方式指定参数值。有关更多信息,请参见对 SqlDataSource 控件使用参数

数据源控件在调用其对应的 SelectUpdateDeleteInsert 方法时执行这些命令。当您调用绑定到数据源控件的页面或控件的 DataBind 方法时,将自动调用 Select 方法。如果希望数据源控件执行命令,还可以显式调用这四个方法中的任何一个。某些控件(如 GridView)可以自动调用这些方法,您无需调用这些方法或显式调用 DataBind 方法。有关更多信息,请参见使用 SqlDataSource 控件选择数据使用 SqlDataSource 控件修改数据

返回 DataSet 或 DataReader 对象

SqlDataSource 控件可以返回两种格式的数据:作为 DataSet 对象或作为 ADO.NET 数据读取器。通过设置数据源控件的 DataSourceMode 属性,可以指定要返回的格式。DataSet 对象包含服务器内存中的所有数据,并允许您在检索数据后采用各种方式操作数据。数据读取器提供可获取单个记录的只读光标。通常,如果要在检索数据后对数据进行筛选、排序、分页,或者要维护缓存,可以选择返回数据集。相反,如果只希望返回数据并且正在使用页面上的控件显示该数据,则可以使用数据读取器。例如,数据读取器适用于以下情形,即返回的数据要在 ListBoxDropDownListGridView 控件中显示,在这些控件中,以只读格式显示一个结果的列表。

使用 SqlDataSource 控件进行缓存

SqlDataSource 控件可以缓存它已检索的数据,这样可以避免开销很大的查询操作,从而增强应用程序的性能。只要数据相对稳定,且缓存的结果小得足以避免占用过多的系统内存,就可以使用缓存。

默认情况下不启用缓存。将 EnableCaching 设置为 true,便可以启用缓存。缓存机制基于时间;您可以将 CacheDuration 属性设置为缓存数据的秒数。数据源控件为连接、选择命令、选择参数和缓存设置的每个组合维护一个单独的缓存项。

SqlDataSource 控件还可以利用 SQL Server 的缓存依赖项功能(如果您的 SQL Server 版本已提供)。使用此功能可以指定保留在缓存中的数据,这些数据一直保留到 SQL Server 在指定的表中报告更改为止。使用这种类型的缓存可以提高在 Web 应用程序中进行数据访问的性能,因为您可以最大限度地减少数据检索的次数,仅在必须获取刷新数据时执行检索。

有关更多信息,请参见使用 SqlDataSource 控件缓存数据

使用 SqlDataSource 控件进行筛选

如果已为 SqlDataSource 控件启用缓存,并且已将数据集指定为 Select 查询返回的数据格式,则还可以筛选数据,而无需重新运行该查询。SqlDataSource 控件支持 FilterExpression 属性,可以使用该属性指定应用于由数据源控件维护的数据的选择条件。还可以创建特殊的 FilterParameters 对象,这些对象在运行时为筛选表达式提供值,从而对筛选表达式进行参数化。

使用 SqlDataSource 控件进行排序

SqlDataSource 控件支持在 DataSourceMode 设置为 DataSet 时响应绑定控件的排序请求。有关更多信息,请参见使用数据源控件对数据进行排序

返回页首

代码示例

使用 SqlDataSource 控件选择数据

对 SqlDataSource 控件使用参数

使用 SqlDataSource 控件修改数据

使用 SqlDataSource 控件缓存数据

如何:对 SqlDataSource 控件启用筛选

如何:使用 SqlDataSource 控件连接到 SQL Server 数据库 (Visual Studio)

如何:使用 SqlDataSource 控件连接到 Access 数据库 (Visual Studio)

如何:使用 SqlDataSource 控件连接到 ODBC 数据库 (Visual Studio)

如何:使用 SqlDataSource 控件连接到 Oracle 数据库 (Visual Studio)

返回页首

类参考

下表列出了与 SqlDataSource 控件相关的关键类。

成员

说明

SqlDataSource

控件的主类。

返回页首

请参见

概念

LinqDataSource Web 服务器控件概述

参考

ObjectDataSource Web 服务器控件概述

其他资源

数据源 Web 服务器控件