C# 无法更新id-id不可更新
我试图在employee表上更新我的信息数据(在access数据库中),但我得到了这样一个错误,即无法更新id-id不可更新 假设我有一个雇员 身份证号码:1 姓名:马克 姓氏:琼森 年龄:33 我写更新声明,以防将来我想更改他的信息,…比如说 身份证号码:1 姓名:马克 姓氏:马克森 年龄:34 我的代码我做错了什么,如何更新/编辑我的数据C# 无法更新id-id不可更新,c#,database,parameters,C#,Database,Parameters,我试图在employee表上更新我的信息数据(在access数据库中),但我得到了这样一个错误,即无法更新id-id不可更新 假设我有一个雇员 身份证号码:1 姓名:马克 姓氏:琼森 年龄:33 我写更新声明,以防将来我想更改他的信息,…比如说 身份证号码:1 姓名:马克 姓氏:马克森 年龄:34 我的代码我做错了什么,如何更新/编辑我的数据 private void button2_Click_2(object sender, EventArgs e) { try
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);
}
}
很可能,
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;
您应该在命令文本中添加一个
,其中。如果不添加,您的所有记录都将更改。我想您需要这样:
cmd.CommandText = "Update Employee SET Name = @Name, LastName = @LastName, User_name = @User_name, Password = @Password, E_mail = @E_mail, Address = @Address WHERE ID = @ID";
我认为您的“ID”不仅仅是一段数据,而且也是表主键。在这种情况下,您应该永远不要更新它
主键是不可变的,这不仅是因为它唯一地标识数据库中的一条记录,而且所有其他表都会通过外键引用此列,外键会打断或在各处留下孤立行。另外,更新它的目的是什么?用户甚至不知道它的存在,因为它只是保持完整性的内部数据库结构的一部分,仅此而已
简言之,不要尝试
如果您真的想更新它,该列不应该自动生成,因为DB引擎很可能会捕获您的错误并阻止它。它仍然会给我同样的错误,当我这样写它时=/实际上没有设置它会在update语句中给我语法错误Sorry,这是我的错误:-)请再试一次其他错误:->至少一个必需参数的值尚未确定,而不是cmd.parameters.Add
trycmd.parameters.AddWithValue
method,所以我只需删除它并删除where语句?是的,只需从SET
部分删除它,但是其他人所说的WHERE
子句是正确和重要的。ID列非常适合在中使用,因为它可以唯一地标识行。好的,谢谢,但不知何故它不会更新我的信息。我没有得到任何错误,它说成功更新,但信息仍然是一样的。我没有犯任何错误,因为当我在datagridview中按用户id时,文本框会自动填充