Рейтинг:
1
OriginalGriff
Хорошо, что вы избавились от сцепленной текстовой версии - это очень опасно!
Следующее, что нужно сделать, это выяснить, когда вы получаете "синтаксическую ошибку" - и я предполагаю, что это происходит во время выполнения, а не во время компиляции, что означает, что это проблема с командой SQL.
И это означает, что это, скорее всего, будут именованные параметры, которые OleDbConnection не поддерживает так же, как SqlConnection.
Потому что вы называете параметр в своем запросе, но комментируете его в своем запросе. cmd.Parameters.AddwithValue
список, командный процессор tejh, вероятно, жалуется на то, что "<pre>where StudentID=@StudentID</pre>
- потому что ... @StudentID
будет заменен нулем, и это, вероятно, проблема
Раскомментируйте строку, и она должна работать:
cmd.CommandText = "update product set LastName=@LastName,FirstName=@FirstName,MiddleName=@MiddleName,Section=@Section where StudentID=@StudentID";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@LastName", TextBox1.Text);
cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
cmd.Parameters.AddWithValue("@MiddleName", TextBox3.Text);
cmd.Parameters.AddWithValue("@Section", TextBox4.Text);
cmd.Parameters.AddWithValue("@StudentID", TextBox5.Text);
cmd.ExecuteNonQuery();
Но помните, что имена не имеют значения в OldDb и могут быть заменены заполнителями - порядок, в котором они добавляются, управляет тем, куда они идут!
cmd.CommandText = "UPDATE product SET LastName=@LastName, FirstName=?, MiddleName=?, Section=? WHEREStudentID=?";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@LastName", TextBox1.Text);
cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
cmd.Parameters.AddWithValue("@MiddleName", TextBox3.Text);
cmd.Parameters.AddWithValue("@Section", TextBox4.Text);
cmd.Parameters.AddWithValue("@StudentID", TextBox5.Text);
cmd.ExecuteNonQuery();
Member 14042406
я раскомментирую строку, но она все еще дает мне синтаксическую ошибку
OriginalGriff
Поэтому покажите нам точно код, который вы используете, и полный текст ошибки.
Member 14042406
кон.Открыть();
OleDbCommand cmd = con.CreateCommand();
УМК.Свойство Commandtype = Значение Commandtype.Текст;
УМК.Свойства commandtext = "обновление продукта набор фамилия=@фамилия, имя=@firstName и middlename=@отчество, раздел,=@раздел, где StudentID="+TextBox5.Текст+"";
cmd.параметры.Четкий();
cmd.параметры.AddWithValue("@LastName", TextBox1.Text);
cmd.параметры.AddWithValue ("@FirstName", TextBox2.Text);
cmd.параметры.AddWithValue("@MiddleName", TextBox3.Text);
cmd.параметры.AddWithValue ("@Section", TextBox4.Text);
УМК.Метод executenonquery();
я удаляю параметры StudentID и заменяю where StudentID=@StudentID на StudentID="+Textbox5.Text+"
OriginalGriff
И теперь я могу уничтожить вашу базу данных по своему желанию.
Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.
Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.
Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?