728x90


C# SQLite 에서 다중으로 행을 선택한 경우 해당 행을 모두 삭제하는 코드이다.

C# SQLite에서 다량의 데이터를 삭제하는 테스트를 해봤더니 새벽에 테스트한 로직은 시간이 너무 많이 걸린다.

그래서 로직은 새로 구현하여 변경했고, 테스트 결과는 매우 만족스럽게 빠르게 처리된다.

foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) 이 구문은 다중으로 행을 선택하면 로직이 가장 나중에 선택된 행부터 선택하여 삭제를 한다는 걸 확인했다.

연결형 방식으로 처리하며 코드는 아래 포멧을 준수하여 필요한 부분만 수정하면, 구글링이나 네이버 사이트 검색하지 않아도 될 것이다.

if (!this.dataGridView1.Rows[this.rowIndex].IsNewRow) 는 dataGridView 에서 신규행 추가를 위한 행이 아니면을 의미하므로 dataGridView 가 아닌 경우에는 코드를 제외하면 된다.

Update 처리도 동일한 방식으로 코드를 구현하면 된다.


private void btnDelete_Click(object sender, EventArgs e)
{
    int delete_cnt = 0; // 삭제건수 카운트
    if (!this.dataGridView1.Rows[this.rowIndex].IsNewRow)
    {
        using(var Conn = new SQLiteConnection(ConnectionString))
        {
            Conn.Open();
            using (var cmd = new SQLiteCommand(Conn))
            {
                using (var transaction = Conn.BeginTransaction())
                {
                    try
                    {
                        foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
                        {
                            cmd.CommandText = string.Format("DELETE FROM items Where uid={0}", item.Cells[2].Value);
                            cmd.ExecuteNonQuery();
                            delete_cnt++;
                        }
                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        MessageBox.Show(ex.Message);
                        throw;
                    }
                }
            }
            Conn.Close();
            dgv = GetSqliteItems();
            MessageBox.Show(delete_cnt.ToString() + "건 삭제되었습니다...");
        }
    }
}

블로그 이미지

Link2Me

,