запрос не возвращает записи, используя CONTAINS() VSS asp.net

У меня проблемы с возвратом записей с использованием contains(transact-SQL).

этот запрос имеет результаты в окне запроса SQL-сервера с использованием статического значения

select * from archive_master where docgroupID=46 and( CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"1"')
   OR CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"*1"')
   OR CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"1*"')
   OR CONTAINS((docno,docname,accountno,accountName,tags,docyear,docmonth),'"*1*"')
   )

однако, если я отправлю запрос в sqlcommand и заменю статическое значение параметрами, он не вернет запись

вот мой код:

string oconn = ConfigurationManager.ConnectionStrings["ARCHDB"].ConnectionString;
    using (SqlConnection empCon = new SqlConnection(oconn))
    {


        if (txtsearch.Text == "")
        {
            query = "select * from archive_master where docgroupID=@docgroupID";
         }
        else
        {
           query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry"")  OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""@qry*"")  OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry*""))";
        }


        using (SqlCommand emp_Cmd = new SqlCommand(query, empCon))
        {

            if (txtsearch.Text == "")
            {
                SqlParameter pdocgroupID = emp_Cmd.Parameters.Add("@docgroupID", SqlDbType.BigInt);
                pdocgroupID.Value = Request.QueryString["docgroupID"];
            }
            else
            {
                SqlParameter pdocgroupID = emp_Cmd.Parameters.Add("@docgroupID",SqlDbType.BigInt);
                SqlParameter pqry = emp_Cmd.Parameters.Add("@qry", SqlDbType.NVarChar);
                pdocgroupID.Value = Request.QueryString["docgroupID"];
                pqry.Value = txtsearch.Text;
            }



            emp_Cmd.CommandType = CommandType.Text;
            empCon.Open();

            SqlDataAdapter adpData = new SqlDataAdapter(emp_Cmd);
            DataTable dt = new DataTable();
            adpData.Fill(dt);


            GridDocgroup.DataSource = dt;
            GridDocgroup.DataBind();
            empCon.Close();




        }
    }

правильный ли мой подход к моей строке запроса? где @qry и @docgroupID — параметры

  query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '""@qry""') OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry"")  OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""@qry*"")  OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), ""*@qry*""))";

person Jeffrey Bernardo    schedule 09.02.2018    source источник
comment
не могли бы вы попробовать измененный ниже запрос и снова выполнить код, выберите * из archive_master, где docgroupID=@docgroupID и (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '@qry') OR CONTAINS((docno , docname, accountno, accountName, tags, docyear, docmonth), '@qry') ИЛИ CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), '@qry') ИЛИ СОДЕРЖИТ((номер документа, имя документа, номер учетной записи, имя учетной записи, теги, год документа, месяц документа), '@qry'))   -  person Kevin Shah    schedule 09.02.2018
comment
привет Кевин, Этот запрос вернет значение, если слово находится в точной фразе, я пытаюсь найти часть фразы (префикс и суффикс), используя подстановочный знак *   -  person Jeffrey Bernardo    schedule 09.02.2018
comment
Да, я знаю, что вы создали полнотекстовый индекс в базе данных   -  person Kevin Shah    schedule 09.02.2018
comment
В вашем запросе вам нужно поставить одинарную кавычку (') перед @qry, как если бы вы видели в запросе sql, который вы выполнили на последовательном сервере   -  person Kevin Shah    schedule 09.02.2018
comment
query = @select * from archive_master где docgroupID=@docgroupID и (СОДЕРЖИТ((номер документа, имя документа, номер учетной записи, имя учетной записи, теги, год документа, месяц документа), '@qry') ИЛИ СОДЕРЖИТ((номер документа, имя документа, номер учетной записи, имя учетной записи, теги , docyear, docmonth), '@qry') ИЛИ СОДЕРЖИТ((docno, docname, accountno, accountName, tags, docyear, docmonth), '@qry') ИЛИ СОДЕРЖИТ((docno, docname, accountno, accountName, tags, docyear, docmonth), '@qry')); попробовал этот запрос по-прежнему не показывает записи. я думаю, что звездочка не публикуется здесь в комментарии, поскольку она обрабатывается как текстовый формат.   -  person Jeffrey Bernardo    schedule 09.02.2018


Ответы (1)


в качестве обходного пути я пересмотрел запрос и передал подстановочный знак для значения параметров

  query = @"select * from archive_master where docgroupID=@docgroupID and (CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry1) OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry2)  OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry3)  OR CONTAINS((docno, docname, accountno, accountName, tags, docyear, docmonth), @qry4))";

SqlParameter pdocgroupID = emp_Cmd.Parameters.Add("@docgroupID",SqlDbType.BigInt);
                    SqlParameter pqry1= emp_Cmd.Parameters.Add("@qry1", SqlDbType.NVarChar);
                    SqlParameter pqry2 = emp_Cmd.Parameters.Add("@qry2", SqlDbType.NVarChar);
                    SqlParameter pqry3 = emp_Cmd.Parameters.Add("@qry3", SqlDbType.NVarChar);
                    SqlParameter pqry4 = emp_Cmd.Parameters.Add("@qry4", SqlDbType.NVarChar);

                    pdocgroupID.Value = Request.QueryString["docgroupID"];
                    pqry1.Value =txtsearch.Text.Trim();
                    pqry2.Value = '"'+ txtsearch.Text.Trim()+"*"+'"';
                    pqry3.Value = '"'+"*" + txtsearch.Text.Trim() + "*"+'"';
                    pqry4.Value = '"'+"*" + txtsearch.Text.Trim()+'"';
person Jeffrey Bernardo    schedule 09.02.2018