我想更新/编辑访问数据库的雇员表中的用户数据。
当我完成要更改的字段(姓名、姓氏等)时,它会为我提供更新的数据,但是当我刷新表时,数据没有更改 - 已更新。
我想执行的更改,例如 - 将名称从卢克更改为泰勒等。
我哪里做错了?代码中的错误在哪里,我用于将用户添加到数据库的代码是否以某种方式影响我的更新代码?
我添加用户的代码与更新的代码几乎相同,除了查询,并且工作正常。
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);
}
这是因为您的ID处于何处条件。
您还将通过以下方式更改/更新您的 ID:
command.Parameters.AddWithValue("@ID", userID.Text);
编译器在数据库中找不到此新 ID,因为您在查询中保留了 @ID ID= 条件。
当您只更新名称和其他字段时,查询将变为:
Update Employee set Name = 'Name', LastName = 'LastName', UserName = 'UserName', Password = 'Password', E_mail = 'E_mail', Address = 'Address' WHERE ID = ''";
在这种情况下,您的 ID 可能保持空白。
在更新代码中尝试以下操作:
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使用 C# OleDbConnection 访问 UPDATE 命令和命令不起作用
原因概述如下:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx
OLE DB .NET 提供程序不支持用于传递的命名参数 由 OleDb命令,当命令类型设置为文本时。在这种情况下, 必须使用问号 (?) 占位符。