Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法更新id-id不可更新_C#_Database_Parameters - Fatal编程技术网

C# 无法更新id-id不可更新

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

我试图在employee表上更新我的信息数据(在access数据库中),但我得到了这样一个错误,即无法更新id-id不可更新

假设我有一个雇员

身份证号码:1

姓名:马克

姓氏:琼森

年龄:33

我写更新声明,以防将来我想更改他的信息,…比如说

身份证号码: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);
        }
    }

很可能,
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
try
cmd.parameters.AddWithValue
method,所以我只需删除它并删除where语句?是的,只需从
SET
部分删除它,但是其他人所说的
WHERE
子句是正确和重要的。ID列非常适合在
中使用,因为它可以唯一地标识行。好的,谢谢,但不知何故它不会更新我的信息。我没有得到任何错误,它说成功更新,但信息仍然是一样的。我没有犯任何错误,因为当我在datagridview中按用户id时,文本框会自动填充