首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqldatasource where参数

Sqldatasource where参数
EN

Stack Overflow用户
提问于 2011-07-06 20:26:38
回答 4查看 2.6K关注 0票数 0

我有一个select数据源,在select命令中我有@status参数。该参数在运行时从textbox中获取值。

代码语言:javascript
复制
 <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不会返回任何行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-06 21:59:52

查看documentation on MSDN,您必须更改设置SqlDataSource的方式。

试试这个:

代码语言:javascript
复制
<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

我已经创建了一个工作示例来完成这个答案。这将使用文本框中的文本过滤标题列。如果此文本框为空,它将返回表中的所有行(这是一个可怕的想法,但在本例中是可以的)。它正在查询我为其设置了名为AWorks的连接字符串的AdventureWorks数据库。

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2011-07-06 20:30:39

设置ConvertEmptyStringToNull="true",然后尝试....

票数 0
EN

Stack Overflow用户

发布于 2011-07-06 21:50:21

尝试下面这样的条件:

代码语言:javascript
复制
(@Status is null or @Status ='' Or Status = @Status)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6596337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档