ExecuteNonQuery работает только один раз, чтобы удалить запись за один прогон (без исключения, без ошибок) - PullRequest
0 голосов
/ 23 октября 2019

Это простая операция вставки, обновления, удаления Приложение в C # Я работаю и использую базу данных Access 2010 (Accdb). Вставка и обновление работают, и данные правильно заполняются в DataGridView, но операция удаления - сбой.

Я запускаю приложение, ранее сохраненные записи, заполненные в DataGridView при загрузке формы, я нажимаю на удаление, и выбранная строка удаляется из базы данных. и datagridview заполняется, чтобы показать обновленные данные.

Теперь я выбираю другую строку и снова нажимаю кнопку удаления, но она не удаляет ни одной строки.

ExecuteNonQuery возвращает 0 на этот раз, и я отлаживал ее. Cust_ID тот же самый, который выбирается при щелчке строки. Не знаю, что здесь происходит. Нужно взглянуть с точки зрения другого человека.

Вот код.

//Some Global Variables
int r;
int R_ID;
string cid = "";
string scon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\DB_Medical.accdb;Persist Security Info=True";
OleDbConnection con;
OleDbCommand cmd = new OleDbCommand();

private void btnDelete_Click(object sender, EventArgs e)
{
    if (dgv.SelectedRows.Count == 0)
    {
        MessageBox.Show("No row selected");
    }
    else
    {
        DeleteRecord();
    }
}

public void DeleteRecord()
{
    con = new OleDbConnection(scon);
    con.Open();
    cmd.Connection = con;

    int id = int.Parse(dgv.Rows[dgv.SelectedRows[0].Index].Cells[0].Value.ToString());
    string delquery = "DELETE FROM tbl_Customer WHERE Cust_ID=@id";
    cmd.Parameters.AddWithValue("@id", id);
    cmd.CommandText = delquery;
    int row = cmd.ExecuteNonQuery();
    con.Close();
    MessageBox.Show(row + " rows deleted.");

    LoadDataInGridView();
}

private void LoadDataInGridView()
{
    string q1 = "SELECT * FROM tbl_Customer";
    con = new OleDbConnection(scon);
    con.Open();
    cmd.Connection = con;
    OleDbDataAdapter adapter = new OleDbDataAdapter(q1, con);
    DataSet s1 = new DataSet();
    adapter.Fill(s1);
    dgv.DataSource = s1.Tables[0];
    con.Close();
    ViewAdjust();
}

private void ViewAdjust()
{
    dgv.Columns[0].HeaderText = "ID";
    dgv.Columns[1].HeaderText = "Name";
    dgv.Columns[2].HeaderText = "Address";
    dgv.Columns[3].HeaderText = "City";
    dgv.Columns[4].HeaderText = "Mobile";
    dgv.Columns[5].HeaderText = "Phone";
}
...