无法更新id-id无法更新

时间:2014-01-12 15:49:46

标签: c# database parameters

我尝试在员工表上更新我的信息数据(在访问数据库中),但是我收到的错误是无法更新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);
        }
    }

3 个答案:

答案 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;