[英]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.