SqlDataSource.Select(DataSourceSelectArguments) 方法

定义

通过使用 SelectCommand SQL 字符串以及 SelectParameters 集合中的任何参数,从基础数据库中检索数据。

public:
 System::Collections::IEnumerable ^ Select(System::Web::UI::DataSourceSelectArguments ^ arguments);
public System.Collections.IEnumerable Select (System.Web.UI.DataSourceSelectArguments arguments);
member this.Select : System.Web.UI.DataSourceSelectArguments -> System.Collections.IEnumerable
Public Function Select (arguments As DataSourceSelectArguments) As IEnumerable

参数

arguments
DataSourceSelectArguments

用于请求对数据执行基本数据检索操作以外操作的 DataSourceSelectArguments 对象。

返回

一个数据行的 IEnumerable 列表。

例外

SqlDataSource 对象无法与基础数据源建立连接。

示例

以下示例演示如何以编程方式调用 Select 方法并基于查询结果设置值。 以下示例演示 Web 控件的声明性代码。

<asp:SqlDataSource 
    ID="SqlDataSource1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT Count(*) FROM [Products] WHERE ([ReorderLevel] > 0)">
</asp:SqlDataSource>
<asp:Label 
    ID="Label1" 
    runat="server" 
    Text="">
</asp:Label>
<br />
<asp:Button 
    ID="Button1" 
    Text="Check Reorder Status" 
    runat="server" 
    onclick="Button1_Click" />
<asp:SqlDataSource 
    ID="SqlDataSource1" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT Count(*) FROM [Products] WHERE ([ReorderLevel] > 0)">
</asp:SqlDataSource>
<asp:Label 
    ID="Label1" 
    runat="server" 
    Text="">
</asp:Label>
<br />
<asp:Button 
   ID="Button1" 
   Text="Check Reorder Status" 
   runat="server" 
   onclick="Button1_Click" />

以下示例演示如何以编程方式调用 Select 方法。 控件 SqlDataSource 返回一个整数。 整数的值用于设置控件的文本 Label ,以及确定是否显示控件 HyperLink

protected void CheckReorderStatus()
{
    DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
    int reorderedProducts = (int)dv.Table.Rows[0][0];
    if (reorderedProducts > 0)
    {
        Label1.Text = "Number of products on reorder: " + reorderedProducts;
    }
    else
    {
        Label1.Text = "No products on reorder.";
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    CheckReorderStatus();
}
Protected Sub CheckReorderStatus()
    Dim dv As DataView
    Dim reorderedProducts As Integer

    dv = CType(SqlDataSource1.Select(DataSourceSelectArguments.Empty), DataView)
    reorderedProducts = CType(dv.Table.Rows(0)(0), Integer)
    If (reorderedProducts > 0) Then
        Label1.Text = "Number of products on reorder: " & reorderedProducts
    Else
        Label1.Text = "No products on reorder."
    End If
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    CheckReorderStatus()
End Sub

注解

Select 页面生命周期的阶段, PreRender 会自动调用 方法。 它由已通过属性DataSourceID附加到SqlDataSource控件的数据绑定控件调用。

如果 属性设置为 值,DataSourceModeDataSetSelect 方法将返回 DataView 对象。 如果 属性设置为 值,DataSourceModeDataReaderSelect 方法将返回 IDataReader 对象。 IDataReader读取完数据后关闭 对象。

在执行 Select 操作之前, OnSelecting 将调用 方法来引发 Selecting 事件。 可以处理此事件来检查参数的值,并在操作之前 Select 执行任何处理。

操作 Select 完成后, OnSelected 将调用 方法来引发 Selected 事件。 可以处理此事件以检查任何返回值和错误代码,并执行任何后期处理。

如果 属性 DataSourceMode 设置为 SqlDataSourceMode.DataSet 并启用缓存,则 对象将在 SqlDataSource 操作期间 Select 从中检索数据并将数据保存到缓存。 缓存根据 和 CacheExpirationPolicy 属性的组合CacheDuration指定的缓存行为创建、丢弃或刷新。

重要

在 Microsoft Windows 身份验证 下使用客户端模拟时,当第一个用户访问数据时,数据将缓存。 如果其他用户请求相同的数据,则会从缓存中检索数据。 不通过对数据库进行另一次调用来检索数据,以验证用户对数据的访问权限。 如果希望多个用户访问数据,并且希望每次检索数据都由数据库的安全配置进行验证,请不要使用缓存。

如果 属性 DataSourceMode 设置为 SqlDataSourceMode.DataSet 并且 FilterExpression 已指定属性,则使用提供的任何 FilterParameters 属性计算筛选器表达式,并在操作期间 Select 将生成的筛选器应用于数据列表。

方法Select委托给SelectSqlDataSource 控件关联的 对象的 方法SqlDataSourceView。 若要执行数据检索操作,请使用SqlDataSourceView文本和任何关联的SelectParameters值生成DbCommand对象SelectCommand,然后针对基础数据库执行 DbCommand

重要

值在没有验证的情况下插入到参数中,这是一种潜在的安全威胁。 在执行查询之前, Filtering 使用 事件验证参数值。 有关详细信息,请参阅脚本侵入概述

适用于

另请参阅