В SqlDataAdapter запрос не работает после передачи объединенной строки в виде строки запроса, что не так? - PullRequest
0 голосов
/ 02 апреля 2020

Я создаю настольное приложение, используя C# и SQL Server 2014. В моем SqlDataAdapter запрос SQL не работает после передачи объединенной строки в качестве переменной. Если я пишу запросы в виде прямой строки - все работало нормально. Но ввод 100+ меток вручную - это идиотизм. Я пока не могу понять - что не так с моим кодом?

// block 17. created for splitting unique word from whole user tag text and searching with this tags in database; it returns a unique word!

String Input = search.Text;
Input = Input + " ";

String[] Word_Box = new String[1000];
String Word = "";
int T = 0, Len;
Len = Input.Length;
bool  flag = false;

for (int i = 0; i < Len; i++)
{
    if (Input[i] != ' ')
    {
        Word = Word + Input[i];
        flag = true;
    }
    else if (Input[i] == ' ' && flag == true)
    {
        Word_Box[T++] = Word;
        Word = "";
        flag = false;
    }
}
// block end

// block 18. start for adjusting SQL query string for searching purpose :)
String Query_String;
Query_String = "select * from Tbl_Test3 where";
int WordCount = T - 2;

for (int i = 0; i < T; i++)
{
    Query_String = Query_String + " Tags like '%\"+ \""+ Word_Box[i] +"\" + \"%' ";
    if (i <= WordCount)
    {
        Query_String += "OR ";
    }
}
// block end

con.Open();

//Query_String = "select * from Tbl_FinalTest3 where Tags like '%"+ "Codeforces" + "%' OR  Tags like '%"+ "Topcoder" + "%' ";
SqlDataAdapter adpt = new SqlDataAdapter(Query_String, con);
DataTable dt = new DataTable();
adpt.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();

Ошибка не отображается, и после выполнения в datagridview не отображаются никакие данные, где тот же вывод прямой строки отображается идеально. .

У меня нет сомнений в этой строке, тогда что не так?

Query_String = Query_String + " Tags like '%\"+ \""+ Word_Box[i] +"\" + \"%' ";

Спасибо :)

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Согласно комментарию @Venkataraman R, я решил эту проблему. Я не знал об этом раньше. Это будет полезно многим из нас. Наконец, он работает хорошо с -

Query_String = Query_String + $" Tags like '%{Word_Box[i]}%' ";
0 голосов
/ 03 апреля 2020

Только что проверил структуру вашего запроса, и кажется, что знаки '+' сбивают с толку. Например, когда вы получаете «%» + «Codeforces» + «%», он фактически ищет «% + Codeforces +%» вместо «% Codeforces%». Попробуйте использовать SQL CONCAT () , например:

Query_String = Query_String + " Tags like CONCAT('%', '" + Word_Box[i] + "','%')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...