ali sheibani Ответов: 3

Почему бы не работать с запросом в C#?


string sql2 = "select [A],[number of dups] from [Repeat of dest] where [A] like '%" + textBox3.Text + "' ";
using (System.Data.SqlClient.SqlCommand cmd1 = new System.Data.SqlClient.SqlCommand(sql2, conn2))
{

  System.Data.SqlClient.SqlDataReader reader1 = null;
  reader1 = cmd1.ExecuteReader();
  while (reader1.Read())
   {

       //textBox13.Text = (reader1["number of dups"]).ToString();
       Label label4 = new Label();
       label4.Text = String.Format(": مقصد", i);

       //Position label on screen
       label4.Left = 590;
       label4.Top = (j + 1) * 150;

       //Create textbox
       TextBox textBox4 = new TextBox();

       //Position textbox on screen
       textBox4.Left = 520;
       textBox4.Top = (j + 1) * 150;
       textBox4.Size = new System.Drawing.Size(64, 20);
       textBox4.Text = reader1["number of dups"].ToString();

       //Add controls to form
       tabPage1.Controls.Add(label4);
       tabPage1.Controls.Add(textBox4);
       j++;
     }
     reader1.Close();
}


Что я уже пробовал:

почему бы не поработать запросом где и как ?????
запрос выполняется без where и like????
пожалуйста, помогите мне!

[no name]

Нет никакого смысла повторять это снова и снова, особенно когда вы не слушаете, что вам говорят люди.

CHill60

Что не работает?
Что же происходит?
Не объединяйте строки, чтобы сделать вашу команду sql. Использовать Объект Sqlparameter

3 Ответов

Рейтинг:
20

OriginalGriff

Возможно, это то, что ваше предложение WHERE ожидает точного совпадения в конце строки: если пользователь введет "Hello" в текстовое поле, SQL вернет только строки, заканчивающиеся на "Hello": "Привет! Привет" будет соответствовать, но "Привет! Здравствуйте." не будет. Чтобы обойти это, добавьте второй "%" в конце.

Но не делай этого так! Как вам уже было сказано, никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы:

string sql2 = "SELECT [A],[number of dups] from [Repeat of dest] where [A] like '%' + @STR + '%'";
using (System.Data.SqlClient.SqlCommand cmd1 = new System.Data.SqlClient.SqlCommand(sql2, conn2))
    {
    cmd1.Parameters.AddWithValue("@STR",  textBox3.Text);
    ...


Рейтинг:
2

Patrice T

Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]


Рейтинг:
0

Member 11143054

измените тип данных столбца с помощью nvarchar(size)


Richard Deeming

Этот вопрос был задан, дан ответ и решен восемь месяцев назад.

Ваше "решение" не решит проблему, не говоря уже о том, чтобы добавить что-то интересное к обсуждению.