Member 13288565 Ответов: 1

Удаление из файла. mdb с помощью кнопки delete


Привет всем, я пытаюсь понять, почему мой код не позволяет мне удалить строку из файла. mdb. он продолжает говорить
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll

Additional information: Data type mismatch in criteria expression.
Это та же самая ошибка, которую я получаю, когда ищу предмет. Код для удаления, который вызывает у меня проблемы, таков:
public void Delete()
        {
            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Work Projects\\SurveyApp\\employees.mdb");
            conn.Open();
            OleDbCommand cmd = new OleDbCommand("DELETE *FROM employee Where EmpID='" + EmpID + "'", conn);
            cmd.ExecuteNonQuery();
а код для поиска такой:
private void searchb_Click(object sender, EventArgs e)
      {
          OleDbConnection con;
          OleDbDataAdapter ad;
          //text test
          if (searchtext.Text == "")
          {
              MessageBox.Show("Plese Enter the ID you are searching for");
          }
          else
          {

              con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Work Projects\\SurveyApp\\employees.mdb");
              ad = new OleDbDataAdapter("SELECT * FROM employee WHERE EmpID='searchtext.text'", con);
              ad.SelectCommand.Parameters.Add("@EmpID", OleDbType.Integer);
              ad.SelectCommand.Parameters["@EmpID"].Value = int.Parse(searchtext.Text);


              DataSet ds = new DataSet();
              ad.Fill(ds, "DGV1");
              DGV1.DataSource = ds.Tables["DGV1"];
              DGV1.Refresh();
              DGV1.Update();

          }
      }


Кроме того я не уверен почему обновление тоже не работает я получаю синтаксическую ошибку в инструкции update
public void Update()
        {
            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Work Projects\\SurveyApp\\employees.mdb");
            conn.Open();
            OleDbCommand cmd = new OleDbCommand("update employee([EmpID],[Name],[Jobtitle],[Company])Values ('" + EmpID + "','" + Name + "','" + Jobtitle + "','" + Company + "')", conn);
            cmd.ExecuteNonQuery();

Большое спасибо за все, что вы можете помочь с парнями!

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

Я не уверен, что мне нужно изменить для исправления.

PIEBALDconsult

Вам нужно больше изучать SQL.
Ваш оператор DELETE не должен иметь звездочки перед символом FROM.
Ваш оператор UPDATE выглядит так, как будто вы просто убили оператор INSERT.

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

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Если EmpID columnn-это числовой столбец,а вы передаете строку. Символы ' в строке запроса обозначают строку в SQL, а не числовое значение.

SELECT * FROM employee WHERE EmpID='searchtext.text'


Ваша строка запроса на самом деле должна быть:
SELECT * FROM employee WHERE EmpID=@EmpID

на основе объекта параметра, который вы передали.

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


PIEBALDconsult

Имейте в виду, что драйвер OleDb, реактивный двигатель (и двигатель ACE) и Access на самом деле не используют именованные параметры.

Dave Kreskowiak

Да, я совсем забыл об этом. Это происходит из-за того, что вы больше никогда ни для чего не используете доступ. :)

Member 13288565

Спасибо, Дэйв, это исправило мой поиск, но все же мое удаление дает мне ту же проблему?

Dave Kreskowiak

Учитывая то, что я уже объяснял с помощью оператора SELECT, почему вы думаете, что получаете ту же ошибку с оператором DELETE?

Member 13288565

Я взял строку запроса и сделал именно то, что вы объяснили, а затем это дало мне синтаксическую ошибку в выражении.

Bryian Tan

Возможно пропущен пробел

DELETE *FROM employee
?
Должно быть
DELETE * FROM employee
?

Member 13288565

Все та же синтаксическая ошибка. Есть еще идеи?

Dave Kreskowiak

Учитывая, что мы не можем видеть код, который у вас сейчас есть, нет. Это должно быть в значительной степени дубликат кода SELECT, который у вас есть, включая объекты parameter, просто с другим оператором SQL. Это совсем не трудно.