共用方式為


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控件來呼叫。

如果 屬性設定為 DataSet 值,DataSourceMode方法Select會傳回 DataView 物件。 如果 屬性設定為 DataReader 值,DataSourceMode方法Select會傳回 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 物件,然後針對基礎資料庫執行 DbCommandSelectCommand

重要

值會插入參數而不進行驗證,這是潛在的安全性威脅。 在執行查詢之前, Filtering 請使用 事件來驗證參數值。 如需詳細資訊,請參閱 Script Exploits Overview (指令碼攻擊概觀)。

適用於

另請參閱