当字符串为空时,不执行存储过程

时间:2012-05-21 12:05:54

标签: string stored-procedures parameters sqldatasource

我有一个非常奇怪的问题,我似乎无法找到解决方案。我有一个带有一组参数的SqlDataSource和一个存储过程形式的select命令。其中一个参数是一个名为@SearchPhrase的字符串,它从文本框中获取其值,该文本框在保留为空时假定返回所有帖子。该参数通过搜索按钮获取其值,该按钮首先将searchBox.Text.Trim()的值设置为@SearchPhrase,然后数据绑定显示搜索结果的网格视图。

只要在文本框中输入一个值,存储过程就可以正常工作并返回结果但是当它保持为空时,结果表明存储过程永远不会被执行。我知道这是因为我已经添加了一行,它存储了每次调用时插入的所有参数。

为什么我不能在不输入文本框中的内容的情况下运行它?我可以让它执行的唯一方法是输入一个空格并将“”传递给存储过程,然后在其上执行左右修剪。为什么不在传递长度为0的字符串?

这是数据源的代码和参数的分配。它只是导致问题的@SearchPhrase参数,其余工作正常。点击事件的前三行(注释)是一种有点丑陋的方式,如果我想分配一个“”,那就让它工作。

        <asp:SqlDataSource ID="enterprisesDS" runat="server" 
            ConnectionString="<%$ ConnectionStrings:CRMdb %>" 
            SelectCommand="entGetEnterprises" SelectCommandType="StoredProcedure">

            <SelectParameters>
                <asp:Parameter Name="SearchPhrase" Type="String" />
                <asp:Parameter Name="IsActive" Type="Boolean" DefaultValue="true" />
                <asp:Parameter Name="Country" Type="Byte" />
                <asp:Parameter Name="LocalReference" Type="String" />
                <asp:Parameter Name="Class" Type="String" />
                <asp:Parameter Name="LocationID" Type="Byte" />
            </SelectParameters>

        </asp:SqlDataSource>

        protected void search_Click(object sender, EventArgs e)
    {
        //string searchPhrase = " ";

        //if (searchBox.Text.Trim().Length > 0)
        //    searchPhrase = searchBox.Text.Trim();

        enterprisesDS.SelectParameters["SearchPhrase"].DefaultValue = searchBox.Text;
        enterprisesDS.SelectParameters["Country"].DefaultValue = countries.SelectedValue;
        enterprisesDS.SelectParameters["LocalReference"].DefaultValue = localReferences.SelectedValue;
        enterprisesDS.SelectParameters["Class"].DefaultValue = classes.SelectedValue;

        string locID = "0";
        if (locations.SelectedValue != null)
            locID = locations.SelectedValue;

        enterprisesDS.SelectParameters["LocationID"].DefaultValue = locID;

        enterprises.DataBind();
    }

1 个答案:

答案 0 :(得分:1)

这可能吗?在SqlDataSource上取消选择OnNullParameter属性。

SqlDataSource and stored procedure call issue