![](/img/trans.png)
[英]“Concurrency violation: the UpdateCommand affected 0 of the expected 1 records” when updating a new added record in MS Access database from C# app
[英]c# winforms app updating all the records in ms access
當我更新任何記錄時,整個表都更新了相同的記錄(行),我正在嘗試以下代碼。 我也嘗試過串聯,但有人告訴我有關 sql 注入的信息。
con.Open();
try
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"UPDATE emptable
SET EmpName=@EmpName, Age=@Age ,Mobile=@Mobile,
Designation=@Designation ,Salary=@Salary ,
joiningDate=@joiningDate ,Address=@Address,
AccountNo=@AccountNo,
AccountHoldersName=@AccountHoldersName,
BankName=@BankName,IFSC=@IFSC,
EmpCode=@EmpCode,UINPANNO=@UINPANNO,
Whatsapp=@Whatsapp,FathersName=@FathersName,
MaritalStatus=@MaritalStatus,Email=@Email
WHERE Mobile= Mobile";
cmd.Parameters.AddWithValue("@EmpName", EmpNametxtbx.Text);
cmd.Parameters.AddWithValue("@Age", Agetxtbx.Text);
cmd.Parameters.AddWithValue("@Mobile", Mobiletxtbx.Text);
cmd.Parameters.AddWithValue("@Designation", Designationcmbbx.Text);
cmd.Parameters.AddWithValue("@Salary", Salarytxtbx.Text);
cmd.Parameters.AddWithValue("@JoiningDate", dTP1.Text);
cmd.Parameters.AddWithValue("@Address", Addresstxtbx.Text);
cmd.Parameters.AddWithValue("@AccountNo", Accounttxtbx.Text);
cmd.Parameters.AddWithValue("@AccountHoldersName", Holderstxtbx.Text);
cmd.Parameters.AddWithValue("@BankName", Banktxtbx.Text);
cmd.Parameters.AddWithValue("@IFSC", Ifsctxtbx.Text);
cmd.Parameters.AddWithValue("@EmpCode", EmpCodetxtbx.Text);
cmd.Parameters.AddWithValue("@UINPANNO", Uptxtbx.Text);
cmd.Parameters.AddWithValue("@Whatsapp", Whatsapptxtbx.Text);
cmd.Parameters.AddWithValue("@FathersName", Fatherstxtbx.Text);
cmd.Parameters.AddWithValue("@MaritalStatus", MStatuscmbbx.Text);
cmd.Parameters.AddWithValue("@Email", Emailtxtbx.Text);
cmd.ExecuteNonQuery();
MessageBox.Show("record update");
//refresh or update table
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = con;
string query = "select * from emptable";
cmd1.CommandText = query;
OleDbDataAdapter da = new OleDbDataAdapter(cmd1);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show("error " + ex);
}
// Clear();
con.Close();
問題只是這里的一個錯字WHERE Mobile= Mobile
。
它應該是WHERE Mobile=@Mobile
,因此Mobile
作為參數而不是作為表值傳遞。 在這種情況下,infact 條件始終為真,因此每條記錄都會更新!
關於串聯:永遠不要使用串聯來構建查詢!
如果出現問題,您不僅會弄亂代碼並且准備好頭疼地調試,而且正如有人告訴您的那樣,您也冒着 SQL 注入的風險!
WHERE Mobile= @Mobile
關於Sql注入你可以使用應用程序| 三輪胎架構| 通過連接數據訪問層並使用存儲過程然后加密您的業務層或控制器...但 MS Access 不支持存儲過程,您可以使用 MS SQL Server
運行代碼時,.accb 文件中的 where-condition 參數不應具有相似的值。 您需要清除 accdb 文件中的 privos 值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.