我尝试在员工表上更新我的信息数据(在访问数据库中),但是我收到的错误是无法更新id - id无法更新
假设我有这名员工
ID:1
姓名:马克
姓氏:Jonhson
年龄:33
我写了更新声明,以防我以后要改变他的信息,...让我们说
ID:1
姓名:马克
姓氏:马克森
年龄:34
我的代码我做错了什么以及如何更新/编辑我的数据
private void button2_Click_2(object sender, EventArgs e)
{
try
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = myConnection;
cmd.CommandText = "Update Employee set ID = @ID, Name = @Name, LastName = @LastName, User_name = @User_name, Password = @Password, E_mail = @E_mail, Address = @Address";
cmd.Parameters.Add("@ID", ID.Text);
cmd.Parameters.Add("@Name", name.Text);
cmd.Parameters.Add("@LastName", lastName.Text);
cmd.Parameters.Add("@User_name", userName.Text);
cmd.Parameters.Add("@Password", pass.Text);
cmd.Parameters.Add("@E_mail", eMail.Text);
cmd.Parameters.Add("@Address", address.Text);
myConnection.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("User updated!");
myConncetion.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:1)
您应该在命令文本中添加WHERE
。如果不这样做,您的所有记录都将被更改。我想您想要这样:
cmd.CommandText = "Update Employee SET Name = @Name, LastName = @LastName, User_name = @User_name, Password = @Password, E_mail = @E_mail, Address = @Address WHERE ID = @ID";
答案 1 :(得分:1)
我认为你的“ID”不仅仅是一个数据,而且也是表的主键。在这种情况下,你应该从不更新它。
主键是不可变的,不仅因为它唯一地标识了DB中的记录,而且所有其他表都将通过foreign keys
引用此列,这将在任何地方中断或留下孤立的行。另外,更新它的目的是什么?用户甚至不知道它的存在,因为它只是保持完整性的内部数据库结构的一部分,仅此而已。
简而言之,不要尝试。
如果确实想要更新它,则不应自动生成该列,因为数据库引擎很可能会捕获您的错误并阻止它。
答案 2 :(得分:0)
可能是,ID
是数据库中自动生成的主键。你不能更新它。
实际上,您的UPDATE语句将更新表中的所有记录,因为它缺少WHERE子句。这非常危险。您应该在WHERE子句中指定要更新的记录,并在可能的情况下通过主键引用它:
UPDATE Employee Name = @Name, LastName = @LastName, User_name = @User_name, Password = @Password, E_mail = @E_mail, Address = @Address
WHERE Id = @Id;