Amit Maahi Ответов: 2

У меня неправильный синтаксис рядом с ошибкой, пожалуйста, помогите - вот мой код


частный недействительными методе button2_click(объект отправителя, EventArgs в электронной)
{
против.Открыть();
КМД = новая команда sqlcommand("вставить в запись значения('"+текстовое поле textbox1.Текст+"','"+поле textbox2.Текст+"'" +
",'"+textbox3 и.Текст+"','"+солнце.Текст+","+sun1.Текст+"','" + пн.Текст + "," +
мон1.Текст + "'," + ",'" + Вт.Текст + "," + tue1.Текст + "', '" + СР.Текст + "," +
wed1.Текст +"', '" + чт.Текст + "," + thur1.Текст + "'," +
"'" + пятница.Текст + "," + фри1.Текст + "', '" + сб.Текст + "," + сайт SAT1.Текст +
"')",против);
УМК.Метод executenonquery();
Ящик для сообщений.Show("данные теперь сохраняются в базе данных");
}

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

Я понятия не имею, что делать.

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
У меня неправильный синтаксис рядом с ошибкой

Прежде всего опубликуйте точное сообщение об ошибке.
Из-за того, как вы строите запрос, мы не можем знать, что может быть неправильным, потому что это зависит от пользовательского ввода.
cmd = new SqlCommand("insert into record values('"+textBox1.Text+"','"+textBox2.Text+"'" +
",'"+textBox3.Text+"','"+sun.Text+","+sun1.Text+"','" + mon.Text + "," +
mon1.Text + "'," + ",'" + tue.Text + "," + tue1.Text + "','" + wed.Text + "," +
wed1.Text +"','" + thur.Text + "," + thur1.Text + "'," +
"'" + fri.Text + "," + fri1.Text + "','" + sat.Text + "," + sat1.Text +
"')",con);

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


Рейтинг:
0

MadMyche

Ваш код-это гигантский пример Уязвимость SQL-инъекции
НИКОГДА создайте команду SQL, объединив набор команд и пользовательский ввод.

Правильный способ добавления значений в запрос будет заключаться в использовании SQL Parameter Collection Это позволит должным образом избежать любых фанковых символов, происходящих дальше, а также добавит его в отношении любых типов данных, которые у вас есть в вашем сетевом проекте . .. так что вам не нужно беспокоиться о добавленных одинарных кавычках для текста и т. д.
Несколько минут переписывания вашего исходного кода дали мне что-то вроде этого

private void button2_Click(object sender, EventArgs e)
{
  con.Open();

  string qry = "INSERT INTO record VALUES (@t1, @t2, @t3, @Sn, @Sn1, @Mn, @Mn1, @Tu, @Tu1, @Wd, @Wd1, @Th, @Th1, @Fr, @Fr1, @St, @St1)";

  cmd = new SqlCommand(qry, con);
  cmd.Parameters.AddWithValue("@t1",  textBox1.Text);
  cmd.Parameters.AddWithValue("@t2",  textBox2.Text);
  cmd.Parameters.AddWithValue("@t3",  textBox3.Text);
  cmd.Parameters.AddWithValue("@Sn",  sun.Text);
  cmd.Parameters.AddWithValue("@Sn1", sun1.Text);
  cmd.Parameters.AddWithValue("@Mn",  mon.Text);
  cmd.Parameters.AddWithValue("@Mn1", mon1.Text);
  cmd.Parameters.AddWithValue("@Tu",  tue.Text);
  cmd.Parameters.AddWithValue("@Tu1", tue1.Text);
  cmd.Parameters.AddWithValue("@Wd",  wed.Text);
  cmd.Parameters.AddWithValue("@Wd1", wed1.Text);
  cmd.Parameters.AddWithValue("@Th",  thur.Text);
  cmd.Parameters.AddWithValue("@Th1", thur1.Text);
  cmd.Parameters.AddWithValue("@Fr",  fri.Text);
  cmd.Parameters.AddWithValue("@Fr1", fri.Text);
  cmd.Parameters.AddWithValue("@St",  sat.Text);
  cmd.Parameters.AddWithValue("@St1", sat1.Text);

  cmd.ExecuteNonQuery();
  MessageBox.Show("Data is save now in Database");
}
И вот, я действительно вижу, что синтаксическая ошибка, которую вы получили, скорее всего, была вызвана путаницей одинарных и двойных кавычек, скомпонованных вместе
insert into record values (
  '" + textBox1.Text +"'
, '" + textBox2.Text +"'" + "
, '" + textBox3.Text +"'
, '" + sun.Text      +"
, "  + sun1.Text     +"'
Теперь, когда мы избавились от уязвимости, которая также исправляет вашу синтаксическую ошибку; я действительно вижу несколько проблем, которые я вижу в вашем коде.

Вы открываете SQL-соединение в подпрограмме, но не закрываете его. Это может фактически завершиться неудачей, если соединение уже открыто.

Аналогично, вы определяете существующую команду SQL и выполняете ее. Как правило, это должно быть создано и уничтожено в рамках рутины.

Ваше окно сообщения появляется, если не генерируются исключения, что может быть хорошо в этом случае; но если бы это был оператор claused-update, он все равно работал бы, даже если бы никакие строки не были обновлены.
Как правило, я бы завернул это в Ан IF...ELSE блок, чтобы дать немного лучшую обратную связь.
int ra = cmd.ExecuteNonQuery(); // ra = Rows Affected
if (ra == 1) {
  MessageBox.Show("Data is save now in Database");
} else {
  MessageBox.Show("There was a problem saving your data.");
}


Ссылка:
Коллекции sqlparametercollection.Метод AddWithValue(String, Object) (System.Data.SqlClient) | Microsoft Docs[^]