【发布时间】:2020-07-07 03:40:25
【问题描述】:
String updateQuery = "UPDATE " + tableEmployeeContact + " SET LastUpdate='@CurrentTimeStamp', EmployeeLastName='@EmployeeLastName', EmployeeFirstName='@EmployeeFirstName',EmployeeAddress1='@EmployeeAddress1',EmployeeAddress2='@EmployeeAddress2',EmployeeCity='@EmployeeCity',EmployeeState='@EmployeeState',EmployeeZip='@EmployeeZip',EmployeeHomePhone='@EmployeeHomePhone',EmployeeCellPhone='@EmployeeCellPhone',EmployeeHomeEmail='@EmployeeHomeEmail',EmergencyContactName='@EmergencyContactName',EmergencyContactRelationship='@EmergencyContactRelationship',EmergencyContactHomePhone='@EmergencyContactHomePhone',EmergencyContactCellPhone='@EmergencyContactCellPhone',EmergencyContactWorkPhone='@EmergencyContactWorkPhone' WHERE EmployeeLastName='@EmployeeLastName' AND EmployeeFirstName='@EmployeeFirstName'";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(updateQuery, connection);
connection.Open();
if(connection.State == ConnectionState.Open)
{
command.Parameters.Add("@CurrentTimeStamp", OleDbType.VarChar).Value = labelTimeStamp.Text.Trim();
command.Parameters.Add("@EmployeeLastName", OleDbType.VarChar).Value = cm.LastName;
command.Parameters.Add("@EmployeeFirstName", OleDbType.VarChar).Value = cm.FirstName;
command.Parameters.Add("@EmployeeAddress1", OleDbType.VarChar).Value = cm.EmployeeAddress1;
command.Parameters.Add("@EmployeeAddress2", OleDbType.VarChar).Value = cm.EmployeeAddress2;
command.Parameters.Add("@EmployeeCity", OleDbType.VarChar).Value = cm.EmployeeCity;
command.Parameters.Add("@EmployeeState", OleDbType.VarChar).Value = cm.EmployeeState;
command.Parameters.Add("@EmployeeZip", OleDbType.VarChar).Value = cm.EmployeeZip;
command.Parameters.Add("@EmployeeHomePhone", OleDbType.VarChar).Value = cm.EmployeeHomePhone;
command.Parameters.Add("@EmployeeCellPhone", OleDbType.VarChar).Value = cm.EmployeeCellPhone;
command.Parameters.Add("@EmployeeHomeEmail", OleDbType.VarChar).Value = cm.EmployeeHomeEmail;
command.Parameters.Add("@EmergencyContactName", OleDbType.VarChar).Value = cm.EmployeeECName;
command.Parameters.Add("@EmergencyContactRelationship", OleDbType.VarChar).Value = cm.EmployeeECRelationship;
command.Parameters.Add("@EmergencyContactHomePhone", OleDbType.VarChar).Value = cm.EmployeeECHomePhone;
command.Parameters.Add("@EmergencyContactCellPhone", OleDbType.VarChar).Value = cm.EmployeeECCellPhone;
command.Parameters.Add("@EmergencyContactWorkPhone", OleDbType.VarChar).Value = cm.EmployeeECWorkPhone;
try
{
command.ExecuteNonQuery();
MessageBox.Show("Record Updated");
connection.Close();
} catch (OleDbException ex)
{
Console.WriteLine(ex.Source);
MessageBox.Show(ex.Source);
}
}
}
我收到消息框说“记录已更新”,但是在应用程序运行后,我检查了数据库并且记录没有更新。
不知道为什么它不起作用。我确保每个附加值都是正确的。
当我使用此更新查询并注释 if 语句下的所有参数时
String updateQuery = "UPDATE " + tableEmployeeContact + " SET LastUpdate = '" + labelTimeStamp.Text.Trim() + "', EmployeeLastName = '" + cm.LastName + "', EmployeeFirstName = '" + cm.FirstName + "', EmployeeAddress1 = '" + cm.EmployeeAddress1 + "', EmployeeAddress2 = '" + cm.EmployeeAddress2 + "', EmployeeCity = '" + cm.EmployeeCity + "', EmployeeState = '" + cm.EmployeeState + "', EmployeeZip = '" + cm.EmployeeZip + "', EmployeeHomePhone = '" + cm.EmployeeHomePhone + "', EmployeeCellPhone = '" + cm.EmployeeCellPhone + "', EmployeeHomeEmail = '" + cm.EmployeeHomeEmail + "', EmergencyContactName = '" + cm.EmployeeECName + "', EmergencyContactRelationship = '" + cm.EmployeeECRelationship + "', EmergencyContactHomePhone = '" + cm.EmployeeECHomePhone + "', EmergencyContactCellPhone = '" + cm.EmployeeECCellPhone + "', EmergencyContactWorkPhone = '" + cm.EmployeeECWorkPhone + "' WHERE EmployeeLastName='" + cm.LastName + "' AND EmployeeFirstName='" + cm.FirstName + "'";
查询有效,一切都得到更新。但是有人告诉我,应该使用参数而不是直接在 SQL 字符串中使用值。
【问题讨论】:
-
你确定你有正确的连接字符串吗?您是否无意中更新了不同的数据库?
-
如果该命令更新了0条记录,这也被认为是成功的。您需要检查 oledb 命令更新的行数 - 如 PaulF 的回答所示。
-
@itsme86 - 错误的连接字符串会导致异常
-
WHERE EmployeeLastName='@EmployeeLastName' AND EmployeeFirstName='@EmployeeFirstName'表示不能更改它们 => 更新它们没有意义。'不应该在那里。 -
@PaulF 我没有说“坏”连接字符串。也许他有 2 个数据库副本(test 和 prod)并且指向错误的副本。
标签: c# ms-access oledbcommand