2014-01-13 6 views
1

Я хотел бы обновить/изменить свои данные пользователя в таблице Employee в базе данных доступа.Оператор обновления не обновляет мои данные

Когда я заполняю поля, которые хочу изменить (имя, фамилия и т. Д.), Он дает мне данные обновлены, но когда я обновляю таблицу, данные не изменились - были обновлены.

Изменения я хочу выполнить, например - Изменить имя от Луки Тейлору и т.д.

Где я не так? Где ошибка в коде, и мой код для , добавляющий пользователей в базу данных, каким-то образом повлиял на мой код обновления?

Мой код для добавления пользователей почти такой же, как и для обновления, кроме запроса, и он отлично работает.

private void button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      command.Connection = myConnection; 
      command.CommandText = "Update Employee set Name = @Name, LastName = @LastName, UserName = @UserName, Password = @Password, E_mail = @E_mail, Address = @Address WHERE ID = @ID"; 
      command.Parameters.AddWithValue("@ID", userID.Text); 
      command.Parameters.AddWithValue("@Name", name.Text); 
      command.Parameters.AddWithValue("@LastName", lastName.Text); 
      command.Parameters.AddWithValue("@UserName", userName.Text); 
      command.Parameters.AddWithValue("@Password", pass.Text); 
      command.Parameters.AddWithValue("@E_mail", email.Text); 
      command.Parameters.AddWithValue("@Address", address.Text); 

      myConnection.Open(); 
      command.ExecuteNonQuery(); 
      MessageBox.Show("User updated!"); 
      myConnection.Close(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

код для добавления данных пользовательские

private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 

      command.Connection = myConnection; 
      command.CommandText = "Insert into Employee (ID, Name, LastName, UserName, Password, E_mail, Address)" + "values (@ID, @Name, @LastName, @UserName, @Password, @E_mail, @Address)"; 
      command.Parameters.AddWithValue("@ID", userID.Text); 
      command.Parameters.AddWithValue("@Name", name.Text); 
      command.Parameters.AddWithValue("@LastName", lastName.Text); 
      command.Parameters.AddWithValue("@UserName", userName.Text); 
      command.Parameters.AddWithValue("@Password", pass.Text); 
      command.Parameters.AddWithValue("@E_mail", email.Text); 
      command.Parameters.AddWithValue("@Address", address.Text); 

      myConnection.Open(); 
      command.ExecuteNonQuery(); 
      MessageBox.Show("User added!"); 
      myConnection.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Спасибо за ответы и помощь


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

Мой текущий код

try 
     { 
      OleDbConnection myConnection = new OleDbConnection("\\DATABASE PATH"); 
      OleDbCommand cmd = new OleDbCommand(); 
      cmd.Connection = myConnection; 
      cmd.CommandText = "UPDATE Employees SET Name = @Name, LastName = @LastName, UserName = @UserName, Password = @Password, E_mail = @E_mail, Address = @Address WHERE ID = @"; 

      cmd.Parameters.AddWithValue("@ID", userID.Text); 
      cmd.Parameters.AddWithValue("@Name", name.Text); 
      cmd.Parameters.AddWithValue("@LastName", lastName.Text); 
      cmd.Parameters.AddWithValue("@UserName", userName.Text); 
      cmd.Parameters.AddWithValue("@Password", pass.Text); 
      cmd.Parameters.AddWithValue("@E_mail", eMail.Text); 
      cmd.Parameters.AddWithValue("@Address", address.Text); 

      myConnection.Open(); 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("User successfully added."); 
      myConnection.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
+0

Вы можете добавлять код, который вы используете, чтобы добавить пользователя? Может помочь выявить проблемы. –

+0

уверенный факт, я только что редактировал мой пост – fkr

+0

Вы создаете свои собственные идентификаторы? Вы создаете их вручную? Или БД должна автоматически генерировать их? Похоже, вы создаете свой собственный идентификатор. Вы применяете уникальность? –

ответ

1

Попробуйте следующее в вашем коде обновление:

command.CommandText = "UPDATE Employee SET [Name] = ?, LastName = ?, UserName = ?, [Password] = ?, [E_mail] = ?, Address = ? WHERE [ID] = ?"; 

command.Parameters.AddWithValue("@Name", name.Text); 
command.Parameters.AddWithValue("@LastName", lastName.Text); 
command.Parameters.AddWithValue("@UserName", userName.Text); 
command.Parameters.AddWithValue("@Password", pass.Text); 
command.Parameters.AddWithValue("@E_mail", email.Text); 
command.Parameters.AddWithValue("@Address", address.Text); 
command.Parameters.AddWithValue("@ID", userID.Text); 

Параметры должны быть в порядке, в котором они появляются в CommandText. Ответ на этот вопрос был предложен: Microsoft Access UPDATE command using C# OleDbConnection and Command NOT working

Причины для этого изложена здесь: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx

В .NET Поставщик OLE DB не поддерживает именованные параметры для передачи параметров оператора SQL или хранимой процедуры называется по OleDbCommand, если для CommandType установлено значение Text. В этом случае необходимо использовать знаковый знак вопроса (?) .

2

Его, потому что ваш ID в где условия.

Вы также изменения/обновление идентификатора через:

command.Parameters.AddWithValue("@ID", userID.Text); 

Этот новый идентификатор не найден компилятором в базе данных, так как вы сохранили где ID = @ ID условия в запросе.

Когда вы просто обновляет имя и другие поля, то запрос становится:

Update Employee set Name = 'Name', LastName = 'LastName', UserName = 'UserName', Password = 'Password', E_mail = 'E_mail', Address = 'Address' WHERE ID = ''"; 

Ваш ID может оставаться пустым в этом случае.

+0

, так что я должен удалить ** команду. Параметр.AddWithValue ("@ ID", userID.text); но сохранить условие ** ГДЕ ** - как тот, который ты написал выше? – fkr

+0

не совсем так, но вам нужно сохранить постоянный userID.text или значение, существующее в базе данных –

+0

, и как мне это достичь? – fkr

Смежные вопросы