-
C# DataGridView를 Database에 동기화하는 방법 (InsertCommand, UpdateCommand, DeleteCommand 사용하기)닷넷/WinForms 2017. 10. 20. 09:12반응형
DataGridView, RadGridView 등에서
데이터베이스에 있는 테이블을 그리드뷰에 바인딩하고
그리드뷰에서 데이터를 수정하거나, 추가하거나, 삭제하거나 할 때
각각 UpdateCommand, InsertCommand, DeleteCommand를 사용하면
그동안 써왔던, 익히 알고 있었을 ExecuteNonQuery 로 일일이 쿼리를 줘서
데이터베이스의 데이터를 변경하는 것보다 더욱 수월하게 작업을 할 수 있다.
그러니까, 그리드뷰에서 수정할 때마다 수정버튼을 누르거나, 추가할 때마다 추가버튼을 누르지 않아도
버튼은 마지막에 딱 한번만 누르면
데이터베이스에 그리드뷰에서 수정한 것이 그대로 수정이 되고, 추가한 것은 추가되고, 삭제된 것은 삭제된다.
InsertCommand, UpdateCommand, DeleteCommand에 대한 자세한 설명은
MSDN의 다음 사이트에 친절하게 쓰여있으므로 링크로 대체한다.
이제 이 것을 이용해 그리드뷰에 있는 데이터를 그대로 데이터베이스에 반영하는 방법을 알아보자.
1. 먼저
MS Access DB를 사용하면 OleDbDataAdapter가 될 것이고, MS SQL를 사용하면 SqlDataAdapter가 된다.
자신히 사용하는 DB에 맞는 Adapter와 DataTable 인스턴스를 선언한다.
private SqlDataAdapter da; private DataTable dt;
2. 조회 버튼이벤트 또는 폼 로드시 등의 이벤트에서 그리드뷰에 자신의 데이터베이스를 바인딩한다.
da = new SqlDataAdapter("SELECT ID, Name FROM table1", connection); dt = new DataTable(); dataGridView1.DataSource = dt;
3. 그 이후 데이터그리드뷰에서 수정 또는 추가 또는 삭제 작업을 한다.
4. 작업이 끝나고 마지막에 버튼을 누르는데,
이때 버튼의 클릭이벤트에는
위 MSDN의 설명대로 상황에 맞는 UpdateCommand 또는 InsertCommand 또는 DeleteCommand를 사용한다.
SqlCommand cmd = new SqlCommand("Update table1 SET ID=@id, Name=@name WHERE ID=@oldid"); cmd.Parameters.Add("@id",SqlDbType.VarChar,3,"ID"); cmd.Parameters.Add("@name", SqlDbType.NVarChar,50,"Name"); SqlParameter parameter = cmd.Parameters.Add("@oldid",SqlDbType, 3, "ID"); parameter.SourceVersion = DataRowVersion.Original; da.UpdateCommand = cmd;
그 다음 바로 아래에 두개의 코드를
dataGridView1.EndEdit(); da.Update(dt);
추가하면 완전히 그리드뷰의 데이터가 데이터테이블에 반영되고,
데이터테이블과 연결된 데이터베이스 또한 변경된 데이터들이 반영된다.
반응형'닷넷 > WinForms' 카테고리의 다른 글
C# 간단하게 구현한 CheckBox ComboBox (with CheckedListBox) (1) 2018.03.15 C# 엑셀파일 가져오기 using Microsoft.Office.Interop.Excel (DataGrdiVeiw에 바인딩 포함) (8) 2018.01.10 C# CrossThread 오류가 발생할 때 (0) 2017.08.07 C# 프로그램 실행 중복방지 (0) 2017.04.26 C# DataGridView 열 순서 (0) 2016.12.13