2014-01-13 8 views
1

액세스 데이터베이스의 직원 테이블에서 사용자 데이터를 업데이트/편집하고 싶습니다.업데이트 문이 내 데이터를 업데이트하지 않습니다.

변경할 필드 (이름, 성 등)를 완성하면 데이터가으로 업데이트되지만 테이블을 새로 고칠 때 데이터가 변경되지 않고 업데이트되었습니다. 내가 예를에 대해 수행 할

변경 - 테일러 누가 복음에서 이름을 변경, 등 내가 잘못 갈

? 코드의 실수는 어디에 있으며 에 대한 코드를 데이터베이스에 추가하면 어떻게 든 내 업데이트 코드에 영향을 줍니까?

사용자 추가를위한 내 코드는 쿼리를 제외하고 업데이트와 거의 동일하며 정상적으로 작동합니다.

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

ID를 직접 만드시겠습니까? 수동으로 생성하고 있습니까? 또는 DB가 자동으로 생성해야합니까? 자신의 ID를 만드는 것처럼 보입니다. 독창성을 행사하고 있습니까? –

답변

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

는 는 는
는 는 OLE DB .NET 공급자는 SQL 문 또는 저장 프로 시저에 매개 변수를 전달하는 명명 된 매개 변수를 지원 호출되지 않습니다

명령 유형이 텍스트로 설정된 경우 OleDbCommand. 이 경우 물음표 (?) 자리 표시 자 을 사용해야합니다.

2

그것 때문에 WHERE 조건에 ID.

또한 변화하고 /를 통해 ID를 업데이트 : 당신이 당신의 쿼리의 경우 ID = @의 ID 상태를 유지하기 때문에

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

이 새로운 ID가 데이터베이스에서 컴파일러에 의해 찾을 수 없습니다.

그냥 이름과 다른 필드를 업데이트 한 후 쿼리가된다 :

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

귀하의 ID는이 경우에 빈 남아있을 수 있습니다.

+0

그래서 ** command.Parameters.AddWithValue ("@ ID", userID.text);를 삭제해야 함을 의미합니다. 하지만 ** 상태 **를 유지하십시오 - 위에서 쓴 것처럼? – fkr

+0

정확히 그런 것은 아니지만, 사용자 ID.txt 영구 또는 데이터베이스에있는 값 –

+0

을 유지해야하며 어떻게해야합니까? – fkr