注意:此类在 .NET Framework 2.0 版中是新增的。
表示数据绑定控件的 SQL 数据库。
命名空间:System.Web.UI.WebControls
程序集:System.Web(在 system.web.dll 中)
Public Class SqlDataSource
Inherits DataSourceControl
Dim instance As SqlDataSource
public class SqlDataSource : DataSourceControl
public ref class SqlDataSource : public DataSourceControl
public class SqlDataSource extends DataSourceControl
public class SqlDataSource extends DataSourceControl
SqlDataSource 数据源控件用于表示绑定到数据绑定控件的 SQL 关系数据库中的数据。将 SqlDataSource 控件与数据绑定控件一起使用,可以从关系数据库中检索数据,还可以在网页上显示、编辑和排序数据,而不必编写代码或只需编写少量代码。
若要连接到数据库,必须将 ConnectionString 属性设置为有效的连接字符串。SqlDataSource 可以支持能够使用 ADO.NET 提供程序(例如 SqlClient、OleDb、Odbc 或 OracleClient)连接到的任何 SQL 关系数据库。有关保护连接字符串的信息,请参见 如何:确保使用数据源控件时连接字符串的安全。
若要从基础数据库中检索数据,请用 SQL 查询来设置 SelectCommand 属性。如果与 SqlDataSource 相关联的数据库支持存储过程,可以将 SelectCommand 属性设置为存储过程的名称。指定的 SQL 查询还可以是参数化的查询。可以将与参数化查询相关联的 Parameter 对象添加到 SelectParameters 集合中。有关参数化 SQL 查询及其语法的更多信息,请参见 对数据源控件使用参数。
每当调用 Select 方法时,SqlDataSource 控件都会检索数据。此方法提供对 SelectMethod 属性所指定的方法的编程访问。当调用绑定到 SqlDataSource 的控件的 DataBind 方法时,这些控件会自动调用 Select 方法。如果设置数据绑定控件的 DataSourceID 属性,则该控件会根据需要自动绑定到数据源中的数据。建议通过设置 DataSourceID 属性将 ObjectDataSource 控件绑定到数据绑定控件。或者,也可以使用 DataSource 属性,但必须显式调用数据绑定控件的 DataBind 方法。以下是几个可使用 SqlDataSource 的数据绑定控件的示例:DataGrid、DetailsView、DataList 和 DropDownList。您可以随时以编程方式调用 Select 方法来从基础数据库中检索数据。
在声明性和编程 ASP.NET 方案中,可以将数据绑定控件的 DataSourceID 属性设置为 SqlDataSource 的 ID。还可以将 SqlDataSource 类的实例分配给数据绑定控件的 DataSource 属性。有关将数据绑定控件绑定到数据源控件的更多信息,请参见 ASP.NET 数据访问概述。
您可以执行一些数据操作,例如更新、插入和删除,具体取决于基础数据库产品的功能以及 SqlDataSource 类的实例的配置。若要执行这些数据操作,请设置要执行的操作的相应命令文本以及所有相关参数。例如,对于更新操作,请将 UpdateCommand 属性设置为一个 SQL 字符串或一个存储过程的名称,并将所有必需的参数添加到 UpdateParameters 集合中。无论是由代码显式调用还是由数据绑定控件自动调用,调用 Update 方法时,都会执行更新操作。对于 Delete 和 Insert 操作也遵循这种常规模式。
在 SelectCommand、UpdateCommand、InsertCommand 和 DeleteCommand 属性中使用的 SQL 查询和命令可参数化。这意味着查询或命令可以使用占位符,而不必使用文本值,并且可以将占位符绑定到应用程序或用户定义的变量。您可以将 SQL 查询中的参数绑定到 Session 变量、通过 Web 窗体页的查询字符串传递的值以及其他服务器控件的属性值等。有关如何在对 SqlDataSource 的 SQL 查询中使用参数的更多信息,请参见 对数据源控件使用参数、对 SqlDataSource 控件使用参数 和 对 SqlDataSource 控件使用参数。
默认情况下,SqlDataSource 控件与用于 SQL Server 的 .NET Framework 数据提供程序一起使用,但 SqlDataSource 不是特定于 Microsoft SQL Server 的。对于任何一个数据库产品,只要有适用的托管 ADO.NET 提供程序,您都可以将 SqlDataSource 控件与它连接。与 System.Data.OleDb 提供程序一起使用时,SqlDataSource 可以与任何符合 OLE DB 的数据库协同使用。与 System.Data.Odbc 提供程序一起使用时,SqlDataSource 可与任何 ODBC 驱动程序和数据库协同使用,其中包括 IBM DB2、MySQL 和 PostgreSQL。与 System.Data.OracleClient 提供程序一起使用时,SqlDataSource 可以与 Oracle 8.1.7 以及更高版本的数据库协同使用。允许使用的提供程序的列表记录在配置文件(Machine.config 或 Web.config 文件)的 DbProviderFactories 节中。有关更多信息,请参见 使用 SqlDataSource 控件选择数据。
如果使用 SqlDataSource 在页上显示数据,可以使用数据源控件的数据缓存功能提高该页的性能。使用缓存可以减少数据库服务器上的处理量,但是要占用 Web 服务器上的内存;大多数情况下,这种代价是值得的。当 EnableCaching 属性设置为 true 且 CacheDuration 属性设置为某一秒数(该秒数是在放弃缓存项之前,缓存存储数据的时间)时,SqlDataSource 将自动缓存数据。您还可以指定 CacheExpirationPolicy 和可选的 SqlCacheDependency 值。
SqlDataSource 还提供其他功能,如下表所列。
| 功能 | 要求 |
| 缓存 | 将 DataSourceMode 属性设置为 DataSet 值,EnableCaching 属性设置为 true,并根据希望缓存数据所具有的缓存行为设置 CacheDuration 和 CacheExpirationPolicy 属性。 |
| 删除 | 将 DeleteCommand 属性设置为删除数据所用的 SQL 语句。此语句通常是参数化的。 |
| 筛选 | 将 DataSourceMode 属性设置为 DataSet 值。将 FilterExpression 属性设置为在调用 Select 方法时用于筛选数据的筛选表达式。 |
| 插入 | 将 InsertCommand 属性设置为插入数据所用的 SQL 语句。此语句通常是参数化的。 |
| 分页 | SqlDataSource 当前不支持此功能,但是当您将 DataSourceMode 属性设置为 DataSet 值时,某些数据绑定控件(例如,GridView)支持分页。 |
| 选择 | 将 SelectCommand 属性设置为检索数据所用的 SQL 语句。 |
| 排序 | 将 DataSourceMode 属性设置为 DataSet。 |
| 更新 | 将 UpdateCommand 属性设置为更新数据所用的 SQL 语句。此语句通常是参数化的。 |
与所有数据源控件一样,SqlDataSource 控件与数据源视图类相关联。SqlDataSource 控件只有一个关联的 SqlDataSourceView,且其名称始终为 Table。
SqlDataSource 控件没有可视化呈现;将它实现为控件是为了能够以声明方式创建它,并且可以选择允许它参与状态管理。因此,SqlDataSource 不支持可视化功能,例如 EnableTheming 或 SkinID 属性提供的可视化功能。
本节包含四个代码示例:
-
第一个代码示例演示如何使用声明性语法在 GridView 控件中显示 SQL Server 中的数据。
-
第二个代码示例演示如何使用声明性语法在 GridView 控件中显示符合 ODBC 的数据库中的数据。
-
第三个代码示例演示如何在 GridView 控件中显示和更新数据。
-
第四个代码示例演示如何在 DropDownList 控件中显示和更新数据。
下面的代码示例演示如何以声明方式使用 SqlDataSource 控件从 SQL Server 中检索数据并将检索到的数据显示在 GridView 控件中。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataReader"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataReader"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataReader"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
下面的代码示例演示如何以声明方式使用 SqlDataSource 控件从符合 ODBC 的数据库中检索数据并将检索到的数据显示在 GridView 控件中。ProviderName 属性是用于 ODBC 的 .NET Framework 数据提供程序(即 System.Data.Odbc)的名称。
<%@Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<!-- This example uses a Northwind database that is hosted by an ODBC-compliant
database. To run this sample, create an ODBC DSN to any database that hosts
the Northwind database, including Microsoft SQL Server or Microsoft Access,
change the name of the DSN in the ConnectionString, and view the page.
-->
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ProviderName="System.Data.Odbc"
DataSourceMode="DataReader"
ConnectionString="dsn=myodbc3dsn;"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<!-- This example uses a Northwind database that is hosted by an ODBC-compliant
database. To run this sample, create an ODBC DSN to any database that hosts
the Northwind database, including Microsoft SQL Server or Microsoft Access,
change the name of the DSN in the ConnectionString, and view the page.
-->
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ProviderName="System.Data.Odbc"
DataSourceMode="DataReader"
ConnectionString="dsn=myodbc3dsn;"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<!-- This example uses a Northwind database that is hosted by an ODBC-compliant
database. To run this sample, create an ODBC DSN to any database that hosts
the Northwind database, including Microsoft SQL Server or Microsoft Access,
change the name of the DSN in the ConnectionString, and view the page.
-->
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ProviderName="System.Data.Odbc"
DataSourceMode="DataReader"
ConnectionString="dsn=myodbc3dsn;"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
下面的代码示例演示使用 GridView 控件的常用显示和更新方案。与前面各示例一样,Northwind 数据库中的数据显示在 GridView 控件中。此外,由于指定了 UpdateCommand 属性并将 AutoGenerateEditButton 属性设置为 true,因此无需其他代码就可编辑和更新记录。单击 GridView 控件中的“更新”按钮后,GridView 控件自动将参数添加到 UpdateParameters 集合,并调用 Update 方法。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="EmployeeID"
AutoGenerateEditButton="True"
DataSourceID="SqlDataSource1">
<columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</columns>
</asp:GridView>
</FORM>
</BODY>
</HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="EmployeeID"
AutoGenerateEditButton="True"
DataSourceID="SqlDataSource1">
<columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</columns>
</asp:GridView>
</FORM>
</BODY>
</HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="EmployeeID"
AutoGenerateEditButton="True"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</Columns>
</asp:GridView>
</FORM>
</BODY>
</HTML>
下面的代码示例演示使用 DropDownList 和 TextBox 控件的常用显示和更新方案。DropDownList 控件不自动将更新参数添加到 UpdateParameters 集合,也不自动调用 Update 方法,因此您必须自己完成这些任务。更新参数以声明方式指定,并且您可以添加一个事件处理程序,以便在事件被引发时执行 Update 操作。
<%@Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<SCRIPT runat="server">
Sub On_Click(ByVal source As Object, ByVal e As EventArgs)
Try
SqlDataSource1.Update()
Catch except As Exception
' Handle the Exception.
End Try
Label2.Text="The record was updated successfully!"
End Sub 'On_Click
</SCRIPT>
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees"
UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID">
<UpdateParameters>
<asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/>
<asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/>
</UpdateParameters>
</asp:SqlDataSource>
<asp:DropDownList
id="DropDownList1"
runat="server"
DataTextField="LastName"
DataValueField="EmployeeID"
DataSourceID="SqlDataSource1">
</asp:DropDownList>
<P>
<asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." />
<asp:TextBox id="TextBox1" runat="server" />
<asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" />
<P><asp:Label id="Label2" runat="server" Text="" />
</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">
<SCRIPT runat="server">
private void On_Click(Object source, EventArgs e) {
try {
SqlDataSource1.Update();
}
catch (Exception except) {
// Handle the Exception.
}
Label2.Text="The record was updated successfully!";
}
</SCRIPT>
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees"
UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID">
<UpdateParameters>
<asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/>
<asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/>
</UpdateParameters>
</asp:SqlDataSource>
<asp:DropDownList
id="DropDownList1"
runat="server"
DataTextField="LastName"
DataValueField="EmployeeID"
DataSourceID="SqlDataSource1">
</asp:DropDownList>
<P>
<asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." />
<asp:TextBox id="TextBox1" runat="server" />
<asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" />
<P><asp:Label id="Label2" runat="server" Text="" />
</FORM>
</BODY>
</HTML>
<%@Page Language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<SCRIPT runat="server">
private void On_Click(Object source, System.EventArgs e)
{
try {
SqlDataSource1.Update();
}
catch (Exception except) {
// Handle the Exception.
}
Label2.set_Text("The record was updated successfully!");
} //On_Click
</SCRIPT>
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees"
UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID">
<UpdateParameters>
<asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/>
<asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/>
</UpdateParameters>
</asp:SqlDataSource>
<asp:DropDownList
id="DropDownList1"
runat="server"
DataTextField="LastName"
DataValueField="EmployeeID"
DataSourceID="SqlDataSource1">
</asp:DropDownList>
<P>
<asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." />
<asp:TextBox id="TextBox1" runat="server" />
<asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" />
<P><asp:Label id="Label2" runat="server" Text="" />
</FORM>
</BODY>
</HTML>
System.Object
System.Web.UI.Control
System.Web.UI.DataSourceControl
System.Web.UI.WebControls.SqlDataSource
System.Web.UI.WebControls.AccessDataSource
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
Windows 98、Windows 2000 SP4、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
.NET Framework
受以下版本支持:2.0