Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回0行的查询_C#_Asp.net_Mysql - Fatal编程技术网

C# 返回0行的查询

C# 返回0行的查询,c#,asp.net,mysql,C#,Asp.net,Mysql,我正在建立一个非常简单的求职网站搜索引擎。它有3个可选输入字段:术语、类别和雇主。术语和雇主字段为文本输入,类别为下拉列表。 搜索逻辑非常愚蠢、复杂且不可扩展,但这个搜索只用于一次,我所需要的是它能在少数情况下工作,而且因为我当时有更重要的事情要做,所以我没有试图让它变得更好 这是返回带有搜索结果的数据集的方法 private DataSet GetResults(string term, string category, string employer) { string qu

我正在建立一个非常简单的求职网站搜索引擎。它有3个可选输入字段:术语、类别和雇主。术语和雇主字段为文本输入,类别为下拉列表。 搜索逻辑非常愚蠢、复杂且不可扩展,但这个搜索只用于一次,我所需要的是它能在少数情况下工作,而且因为我当时有更重要的事情要做,所以我没有试图让它变得更好

这是返回带有搜索结果的数据集的方法

private DataSet GetResults(string term, string category, string employer)
{
        string query = "SELECT * FROM Jobs ";

        MySqlConnection conn = DBConnection.Connect();
        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;

        if (String.IsNullOrEmpty(term) && String.IsNullOrEmpty(category) && String.IsNullOrEmpty(employer))
        {
            cmd.CommandText = query;
        }
        else
        {
            query += "WHERE ";
            if (!String.IsNullOrEmpty(term))
            {
                query += "Title LIKE '%@term%' OR Job_Desc LIKE '%@term%' ";

                if (!String.IsNullOrEmpty(category))
                    query += "AND Category = @category ";
                if (!String.IsNullOrEmpty(employer))
                    query += "AND Title LIKE '%@employer%' AND Job_Desc LIKE '%@employer%' ";
            }
            else if (!String.IsNullOrEmpty(category))
            {
                query += "Category = @category ";

                if (!String.IsNullOrEmpty(term))
                    query += "AND Title LIKE '%@term%' OR Job_Desc LIKE '%@term%' ";
                if (!String.IsNullOrEmpty(poduzece))
                    query += "AND Title LIKE '%@employer%' OR Job_Desc LIKE '%@employer%' ";
            }
            else if (!String.IsNullOrEmpty(employer))
            {
                query += "Naziv LIKE '%@employer%' OR Job_Desc LIKE '%@poduzece%' ";

                if (!String.IsNullOrEmpty(term))
                    query += "AND Title LIKE '%@term%' OR Job_Desc LIKE '%@term%' ";
                if (!String.IsNullOrEmpty(category))
                    query += "AND Category = '@category' ";
            }
            cmd.CommandText = query;
            cmd.Parameters.AddWithValue("@term", term.Trim());
            cmd.Parameters.AddWithValue("@category", category.Trim());
            cmd.Parameters.AddWithValue("@employer", employer.Trim());
        }

        MySqlDataAdapter dataAdapter = new MySqlDataAdapter(cmd);
        DataSet searchResult = new DataSet();
        dataAdapter.Fill(searchResult);
        conn.Close();
        return searchResult;
    }
问题如下。当我只搜索一个术语或雇主时,我得到了0行作为回报,但我得到了从下拉列表中选择的类别的结果,该类别不是使用LIKE条件查询的,而是使用=。起初我的猜测是LIKE运算符和OR有问题,但当我使用内置代码的同一查询手动查询数据库时,我会得到结果。 我的下一个猜测是,我的参数有问题,因为如果我用实际的用户查询替换参数占位符,我会得到结果

这很有效。 query+=“类似于“%C程序员%”的标题或类似于“%C程序员%”的作业描述”


谢谢你的帮助,很抱歉英语不好。:)

将LIKE运算符中使用的参数值设置为%,而不是查询中使用的参数值

cmd.Parameters.AddWithValue("@term", "%" + term.Trim() + "%");
cmd.Parameters.AddWithValue("@category", category.Trim());             
cmd.Parameters.AddWithValue("@employer",  "%" + employer.Trim() + "%");
当然,请删除查询文本中的%。此外,不需要像对@category参数所做的那样,在每个字符串参数前面加一个引号


但是,此代码需要进一步改进。如果没有术语值或雇主值,则形成的sql字符串不包含相应参数的占位符。但是,在最后,将添加所有参数。因此,该命令将失败,并出现意外的参数异常。

您是在寻找类似“Title”的“%”+term+%”还是类似于“%”+term+“%”的作业描述??