Boopalslm Ответов: 1

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


Я создаю приложение windows с использованием c# 2010, здесь я использую представление таблицы данных для выставления счетов, как только я сохраняю значения в базе данных, а затем через некоторое время я получаю свои первые значения счетов, и я делаю некоторые изменения и обновляю записи для того же номера счета, но эта ошибка времени пришла.

это для моего кода обновления


using (SqlConnection connect = new SqlConnection(db.Connectionstring()))
          {
              using (SqlCommand command = new SqlCommand())
              {
                  string pro = "";
                  int qty;
                  int totqty;
                  command.Connection = connect;


                  command.CommandText = "update bill set staffid=staffid' and cstid='" + txtmobile.Text + "' and cstname='" + txtname.Text + "' and schemes='" + txtscheme2.Text + "' and counum='" + txtnum.Text + "' and date='" + txtdate.Text + "' and slno=slno, proname=proname, price=price, qty=qty, protax=protax, dis=dis, amt=amt where(recnum=@recnum)";










                  command.Parameters.Add(new SqlParameter("@staffid", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@cstid", SqlDbType.Int));
                  command.Parameters.Add(new SqlParameter("@cstname", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@schemes", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@counum", SqlDbType.VarChar));



                  command.Parameters.Add(new SqlParameter("@recnum", SqlDbType.Int));
                  command.Parameters.Add(new SqlParameter("@date", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@slno", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@proname", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@price", SqlDbType.Float));
                  command.Parameters.Add(new SqlParameter("@qty", SqlDbType.VarChar));
                  command.Parameters.Add(new SqlParameter("@protax", SqlDbType.Float));
                  command.Parameters.Add(new SqlParameter("@dis", SqlDbType.Float));
                  command.Parameters.Add(new SqlParameter("@amt", SqlDbType.Float));

                  command.Parameters.Add(new SqlParameter("@totamt", SqlDbType.Float));
                  command.Parameters.Add(new SqlParameter("@amtdis", SqlDbType.Float));
                  command.Parameters.Add(new SqlParameter("@finamt", SqlDbType.Float));


                  connect.Open();
                  foreach (DataGridViewRow row in dgvfind.Rows)
                  {
                      if (!row.IsNewRow)
                      {
                          command.Parameters["@staffid"].Value = txtstaff.Text;
                          command.Parameters["@cstid"].Value = txtmobile.Text;
                          command.Parameters["@cstname"].Value = txtname.Text;
                          command.Parameters["@schemes"].Value = txtscheme2.Text;
                          command.Parameters["@counum"].Value = txtnum.Text;

                          command.Parameters["@recnum"].Value = lblbill.Text;
                          command.Parameters["@date"].Value = txtdate.Text;



                          command.Parameters["@slno"].Value = row.Cells[0].Value;
                          command.Parameters["@proname"].Value = row.Cells[1].Value;
                          pro = row.Cells[1].Value.ToString();
                          command.Parameters["@price"].Value = row.Cells[2].Value;
                          command.Parameters["@qty"].Value = row.Cells[3].Value;
                          qty = Convert.ToInt32(row.Cells[3].Value);
                          command.Parameters["@protax"].Value = row.Cells[4].Value;
                          command.Parameters["@dis"].Value = row.Cells[5].Value;
                          command.Parameters["@amt"].Value = row.Cells[6].Value;

                          command.Parameters["@totamt"].Value = txt_netamount.Text;
                          command.Parameters["@amtdis"].Value = textBox3.Text;
                          command.Parameters["@finamt"].Value = textBox2.Text;



                         command.ExecuteNonQuery();


Но ошибка пришла

Incorrect syntax near ' and cstid='.
Unclosed quotation mark after the character string ' and slno=slno, proname=proname, price=price, qty=qty, protax=protax, dis=dis, amt=amt where(recnum=@recnum)'.


Как решить вышеописанную ошибку, кто-нибудь даст мне идеи.

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

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

1 Ответов

Рейтинг:
0

OriginalGriff

Ну да - ваши кавычки не имеют никакого смысла!

command.CommandText = "update bill set staffid=staffid' and cstid='"
Но тогда весь SQL ошибочен, и даже если бы это было не так, это было бы чрезвычайно опасно. Не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

У вас даже есть код для добавления параметров, но вы их вообще не используете!
Попробуй:
command.CommandText = "update bill set staffid=@staffid, cstid=@cstid, ...
И обеспечить должным образом параметров :
command.Parameters.AddWithValue("@staffid", txtstaff.Text);
...

Но сделайте себе (и своим пользователям) одолжение: некоторые из них являются числовыми значениями, поэтому сначала проверьте и преобразуйте входные данные пользователя в соответствующее числовое значение, прежде чем пытаться передать их в SQL с помощью int.Метод tryparse, двухместная.Трипарс и так далее. Если есть проблема, сообщите о ней пользователю, а не позволяйте плохим данным поступать в БД и надеяться, что SQL отклонит их.


Boopalslm

ваш код работает хорошо, но как теперь обновить, я добавляю новую строку для представления таблицы данных теперь, как сохранить тот же номер счета для моей новой строки.