测试 url 参数的值,然后从 c# 后面的代码中更改 SqlDataSource.SelectCommand

Posted

技术标签:

【中文标题】测试 url 参数的值,然后从 c# 后面的代码中更改 SqlDataSource.SelectCommand【英文标题】:Test the value of url parameters then Change SqlDataSource.SelectCommand from code behind c# 【发布时间】:2013-04-09 18:33:48 【问题描述】:

您好,我有一个使用 SQLDataSource 生成的 listView,Sql 从 URL 获取 2 个参数,然后执行 Select Query。

但我想先测试参数的值,然后使用 If, else If 更改 sql SelectCommand

问题是我的 IF 语句总是失败,即使我删除它们并在页面加载时更改查询,即使删除了 selectCommand,我也总是返回使用 SQLDataSource 生成的原始数据!

这是我的 ASPX 文件的一部分

        <asp:SqlDataSource ID="jobSearch" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" SelectCommand="">
        <SelectParameters>
            <asp:QueryStringParameter Name="jobTitle" QueryStringField="jobTitle" Type="String" />
            <asp:QueryStringParameter Name="joblocation" QueryStringField="jobLocation" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

这是我的 .CS 文件

protected void Page_Load(object sender, EventArgs e)
    
       // Request.QueryString["jobTitle"]

        string jobTitle = Request.QueryString["jobTitle"];
        string jobLocation = Request.QueryString["jobLocation"];

        if (!string.IsNullOrEmpty(jobTitle) && !string.IsNullOrEmpty(jobLocation))
        
            jobSearch.SelectCommand = "SELECT [jobId], [userId], [jobTitle], [jobBody], [jobPosition], [JobType], [salaryFrom], [salaryTo], [salaryType], [location], [jobCreated], [jobEnd], [jobViews], [applications] FROM [recruiter_Jobs] WHERE FREETEXT (([jobTitle]), @jobTitle) AND FREETEXT (([location]), @location) ORDER BY [jobCreated]";
            test.Text = "1st if " + jobTitle;
        
        else if (jobTitle == string.Empty && !string.IsNullOrEmpty(jobLocation) || string.IsNullOrWhiteSpace(jobTitle) && !string.IsNullOrEmpty(jobLocation) || string.IsNullOrEmpty(jobTitle) && !string.IsNullOrEmpty(jobLocation) || jobTitle == null && !string.IsNullOrEmpty(jobLocation))
        

             jobSearch.SelectCommand = "SELECT [jobId], [userId], [jobTitle], [jobBody], [jobPosition], [JobType], [salaryFrom], [salaryTo], [salaryType], [location], [jobCreated], [jobEnd], [jobViews], [applications] FROM [recruiter_Jobs] WHERE FREETEXT (([location]), @location) ORDER BY [jobCreated]";

             test.Text = "1st else if " + jobTitle;
        

        else if (string.IsNullOrEmpty(jobTitle) && string.IsNullOrEmpty(jobLocation))
        
            jobSearch.SelectCommand = "SELECT [jobId], [userId], [jobTitle], [jobBody], [jobPosition], [JobType], [salaryFrom], [salaryTo], [salaryType], [location], [jobCreated], [jobEnd], [jobViews], [applications] FROM [recruiter_Jobs] ORDER BY [jobCreated]";

            test.Text = "last else if " + jobTitle;
        


    

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

如果它的任何参数为空,则不会触发 SqlDataSource,除非您另外指定:

<asp:SqlDataSource CancelSelectOnNullParameter="False" />

可能还需要为您的查询字符串参数添加一个空默认值:

<asp:QueryStringParameter Name="client" QueryStringField="client" 
     DefaultValue="" ConvertEmptyStringToNull="True" />

【讨论】:

刚刚尝试过,但我得到一个 Null 或空的全文谓词错误 这确实有效,只是我的 SQL 出错了 :-) 谢谢

以上是关于测试 url 参数的值,然后从 c# 后面的代码中更改 SqlDataSource.SelectCommand的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的相对 URL 字符串中获取参数?

我可以从后面的 C# 代码更新 WPF 绑定的值吗?

abap如何获取url后面参数

求教js获取url参数

ASP.NET如何获取url参数

从后面的代码将参数传递给 URL