簡體   English   中英

sqldatasource where參數

[英]Sqldatasource where parameter

我有一個 sqldatasource,在 select 命令中我有@status參數。 該參數在運行時從文本框中獲取值。

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            SelectCommand="SELECT * FROM [project_details] WHERE ([status] = @status)" 
            FilterExpression="title='{4}'" 
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
            EnableCaching="True">
 <SelectParameters>
                <asp:ControlParameter ControlID="TextBox1" Name="status" PropertyName="Text" ConvertEmptyStringToNull="false"
                    Type="String" />
            </SelectParameters>

        </asp:SqlDataSource>

我的問題是,當我運行頁面而不在文本框中輸入參數時,sqldatasource 不會返回任何行。

查看MSDN 上的文檔,您必須更改設置SqlDataSource的方式。

嘗試這個:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        SelectCommand="SELECT * FROM [project_details]" 
        FilterExpression="title='{0}'" 
        ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
        EnableCaching="True">
    <FilterParameters>
            <asp:ControlParameter ControlID="TextBox1" Name="status" PropertyName="Text" ConvertEmptyStringToNull="false" Type="String" />
    </FilterParameters>
</asp:SqlDataSource>

我已經從查詢中刪除了Where子句,因為這將由過濾器表達式應用。 此外,我已將過濾器表達式從title='{4}'更改為title='{0}' 該文檔指出該數字是 FilterParameters 集合中項目的占位符。

更新我還將 SelectParameters 更改為 FilterParameters

更新 2

我創建了一個工作示例來完成這個答案。 這將使用文本框中的文本過濾標題列。 如果這個文本框是空的,它將返回表中的所有行(一個可怕的想法,但對於這個例子來說沒問題)。 它正在查詢 AdventureWorks 數據庫,我為其設置了一個名為 AWorks 的連接字符串。

<asp:SqlDataSource ID="SqlDataSource1"
    ConnectionString="<%$ ConnectionStrings:AWorks %>"
    SelectCommand="SELECT ContactId, Title, FirstName, LastName FROM Person.Contact"
    FilterExpression="Title='{0}'"
    runat="server">
 <FilterParameters>
    <asp:ControlParameter Name="Title" ControlID="txtTitle" PropertyName="Text" />
 </FilterParameters> 
</asp:SqlDataSource>

<asp:TextBox runat="server" Id="txtTitle"></asp:TextBox>
<asp:Button runat="server" UseSubmitBehavior="true" Text="Submit" />

<asp:GridView 
    DataSourceID="SqlDataSource1"
    AutoGenerateColumns="false"
    runat="server">
<Columns>
    <asp:BoundField Visible="false" DataField="ContactId"></asp:BoundField>
    <asp:BoundField Visible="true" DataField="Title"></asp:BoundField>
    <asp:BoundField Visible="true" DataField="FirstName"></asp:BoundField>
    <asp:BoundField Visible="true" DataField="LastName"></asp:BoundField>
</Columns>
</asp:GridView>

設置ConvertEmptyStringToNull="true"然后嘗試....

嘗試這樣的條件:

(@Status is null or @Status ='' Or Status = @Status)

CancelSelectOnNullParameter="false"添加到 SqlDataSource。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM