c# Winforms приложение, обновляющее все записи в мс доступа - PullRequest
0 голосов
/ 22 января 2020

Когда я обновляю любую запись, вся таблица обновляется с той же записью (строкой), я пытаюсь следующий код. Я также попробовал объединение, но кто-то сказал мне об инъекции 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();

Ответы [ 2 ]

0 голосов
/ 22 января 2020
WHERE Mobile= @Mobile

о Sql инъекции вы можете использовать приложение | Архитектура Трех Шин | подключившись через уровень доступа к данным и используя хранимые процедуры, затем зашифруйте свой бизнес-уровень или контроллер ... Но MS Access не поддерживает хранимые процедуры, вы можете использовать MS SQL Server

0 голосов
/ 22 января 2020

Проблема здесь просто опечатка WHERE Mobile= Mobile.
Это должно быть WHERE Mobile=@Mobile, поэтому Mobile передается как параметр, а не как табличное значение. В этом случае условие infact всегда выполняется, и поэтому каждая запись обновляется!

О конкатенации: никогда не используйте конкатенацию для создания запросов!
Мало того, что вы портите свой код, вы готов к сильным головным болям для отладки, если что-то пойдет не так, но, как кто-то сказал вам, вы рискуете SQL инъекция тоже!

...