1 / 22

21장 데이터베이스 다루기

21장 데이터베이스 다루기. 데이터베이스 사용하기. ADO.NET 소개 데이터베이스 연결하기 DataTable 의 이해 DataAdapter 생성하기 DataRow 의 필드 참조하기 레코드 탐색 레코드 추가 , 편집 , 삭제하기 ADO.NET 예제 만들기. ADO .NET 소개. ADO .NET ADO(Active Data Object) 를 통해 만들어진 .NET 기반의 새로운 데이터베이스 기술

moses-gates
Download Presentation

21장 데이터베이스 다루기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 21장 데이터베이스 다루기

  2. 데이터베이스 사용하기 • ADO.NET 소개 • 데이터베이스 연결하기 • DataTable의 이해 • DataAdapter 생성하기 • DataRow의 필드 참조하기 • 레코드 탐색 • 레코드 추가, 편집, 삭제하기 • ADO.NET 예제 만들기

  3. ADO .NET 소개 • ADO .NET • ADO(Active Data Object)를 통해 만들어진 .NET 기반의 새로운 데이터베이스 기술 • 인터넷과 인트라넷에서 연결이 단절된 데이터 집합들을 쉽게 이동시킬 수 있도록 최적화된 DataSet과 DataTable 객체 제공 • 기존의 Connection과 Command 객체와 DataReader라는 객체도 포함 • 주요 객체 • OleDBConnection : OLEDB 데이터 원본과 연결하기 위해 사용 • SqlConnection : SQL Server 데이터 원본과 연결하기 위해 사용. • DataSet : 메모리에 남아있는 데이터의 복사본이다. DataTables 등의 다양한 방법을 통해 DataSet을 사용 • DataTable : 데이터를 처리하고 검색하기 위한 결과 집합(Resultset)을 저장 • DataAdapter : DataReader의 내용을 채우기 위해 사용 • ADO.NET 객체들은 System.Data 네임스페이스에 속해있으며, DataTable은 System.XML에 속해있음

  4. 데이터베이스에 연결하기 • 데이터베이스에 접근하려면 ADO.NET Connection 객체 사용 • OleDbConnection 객체와 SqlConnection 객체 사용가능 • OleDbConnection 객체 초기화 OleDbConnection cnADONetConnection = new OleDbConnection(); • 데이터베이스 연결 상태 저장을 위한 모듈 변수 선언 OleDbConnection m_cnADONetConnection = new OleDbConnection(); • 데이터베이스 연결을 위해 ConnectionString에 데이터 원본 지정 • Provider의 이름, 사용자 이름, 패스워드 등의 연결 정보 저장

  5. 예제 데이터베이스에 연결하기 • 폼의 Load 이벤트에 다음 문장을 입력하여 ADO.NET 연결의 ConnectionString 속성 지정 • 예제 데이터베이스가 C:\Temp 폴더에 저장해놓은 것으로 가정 m_cnADONetConnection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\contacts.mdb"; • 위의 문장 다음에 아래 문장 추가 m_cnADONetConnection.Open();

  6. 데이터 원본의 연결 닫기 • 데이터 원본의 연결 객체 사용이 끝나면 항상 직접 닫아주어야 함 • Connection 객체의 Close() 메서드 사용 • 코드 창의 객체 드롭다운 목록에서 (frmMainEvents) 선택 • 이벤트 드롭다운 목록에서 FormClosing 을 선택하고, 이벤트에 다음 문장 입력 m_cnADONetConnection.Close(); m_cnADONetConnection.Dispose();

  7. DataTables 이해하기 • DataTables • 데이터 원본의 데이터 복사본(Snapshot) 저장 • DataTable에서 변경한 모든 내용은 Update 메서드를 호출할 때까지 데이터의 로컬 복사본으로만 존재 • DataTable의 사용 과정 • DataTable의 내용을을 채우면서 시작 • 결과를 처리하고 • 변경 내용을 다시 데이터 원본에 저장

  8. DataAdapter 만들기 • DataAdapter : DataTable 채우기 • 미리 정의해놓은 데이터 원본과의 연결을 사용하고, 별도로 작성한 질의문(Query)을 실행시키면 질의문의 결과가 DataTable에 채워짐 • DataAdapter 추가하기 • 모듈 수준의 변수를 생성하는 문장 바로 아래에 다음 문장 추가 OleDbDataAdapter cnADONetAdapter = new OleDbDataAdapter([CommandText],[Connection]); • 다음 구문을 m_cnADONewConnection 객체 선언문 바로 아래에 추가한다 OleDbDataAdapter m_daDataAdapter; • 다음 문장을 폼의 Load 이벤트 아래에 입력 m_daDataAdapter = new OleDbDataAdapter("Select * From Contacts",m_cnADONetConnection); • CommandBuilder의 모듈 수준 변수를 생성하기 위해 클래스 헤더에 다음 문장 입력 OleDbCommandBuilder m_cbCommandBuilder; • CommandBuilder 객체를 초기화하기 위해 Form_Load 이벤트 끝에 다음 문장 추가 OleDbCommandBuilder m_cbCommandBuilder = new OleDbCommandBuilder(m_daDataAdapter);

  9. CommandBuilder 객체 초기화

  10. 데이터 테이블 만들고 채우기 • 또 다른 모듈 수준의 변수를 생성하기 위해 클래스 헤더에 다음 문장을 추가하여 DataTable 변수 생성 DataTable m_dtContacts = new DataTable(); • 위의 코드 다음에 DataTable 내에서 사용자의 현재 위치(줄)를 추적하기 위한 정수형 변수를 다음과 같이 선언 int m_rowPosition = 0; • DataTable에 데이터를 채우기 위해, 폼의 Load 이벤트에서 기존 코드 아래에 다음 문장을 추가한다. m_daDataAdapter.Fill(m_dtContacts);

  11. DataRow에서 필드 참조하기 • DataTable 내의 레코드(Row)에 접근하려면, 해당되는 DataRow의 순서 값(Index)을 지정해야 하며, DataTable의 첫 번째 줄에 접근하려면 다음과 같이 코드 작성 DataRow m_rwContact = m_dtContacts.Rows[0]; • DataRow의 데이터 요소들을 컬럼(Column)이라고 부르며, Contacts 테이블의 ContactName을 참조하려면, 다음과 같이 DataRow에 컬럼 이름을 지정 // 컬럼의 값을 변경한다. m_rwContact["ContactName"] = "Bob Brown"; 또는 다음과 같이 사용할 수 있다. // 컬럼의 값을 얻는다. strContactName = m_rwContact("ContactName");

  12. 데이터 테이블에서 현재 레코드 표시하기 • frmMain_FormClosing 이벤트의 다음 위치에 아래 프로시저 전체 입력 private void ShowCurrentRecord() { if (m_dtContacts.Rows.Count==0) { txtContactName.Text = ""; txtState.Text = ""; return; } txtContactName.Text = m_dtContacts.Rows[m_rowPosition]["ContactName"].ToString(); txtState.Text = m_dtContacts.Rows[m_rowPosition]["State"].ToString(); }

  13. 다음 문장을 Load 이벤트의 기존 문장 다음에 입력하여, 폼이 로드될 때 첫 번째 레코드가 표시되도록 함 this.ShowCurrentRecord(); • 데이터를 표시하기 위해서는 폼에 몇 가지 컨트롤을 추가해야 함. 새로운 텍스트 상자를 만들고, 속성을 다음과 같이 설정 • 폼에 두 번째 텍스트 상자를 추가하고 속성을 다음과 같이 설정 • <F5>를 눌러서 프로젝트를 실행시키고, 데이터가 표시되는 것 확인

  14. 레코드 살펴보기 • frmMain 폼에, 첫번째 레코드로 이동할 때 사용하기 위한 버튼을 추가하고 속성을 다음과 같이 설정 • 버튼을 더블클릭하고 버튼의 Click 이벤트에 다음 코드 추가 // 첫 번째 행으로 이동하고 데이터를 표시한다. m_rowPosition = 0; this.ShowCurrentRecord();

  15. 이전 레코드로 이동하기 위한 두 번째 버튼을 추가하고 속성을 다음과 같이 설정 • 두번째 버튼을 더블클릭하고 Click 이벤트에 다음 코드 추가 // 첫 번째 행이 아니면 한 행을 앞으로 이동하고 레코드를 표시한다. if (m_rowPosition != 0) { m_rowPosition--; this.ShowCurrentRecord(); }

  16. DataTable에서 다음 레코드로 이동할 때 사용하기위한 세 번째 버튼을 폼에 추가하고 그 속성을 다음과 같이 설정 • 세 번째 버튼을 더블클릭하고, Click 이벤트에 다음 코드 입력 // 마지막 행이 아니면 한 행을 이동하고 레코드를 표시한다. if (m_rowPosition < m_dtContacts.Rows.Count-1) { m_rowPosition++; this.ShowCurrentRecord(); }

  17. DataTable에서 마지막 레코드로 이동할 때 사용하기 위한 네 번째 버튼을 추가하고 속성을 다음과 같이 지정 • 네 번째 버튼을 더블클릭하고 Click 이벤트에 다음 코드 추가 if (m_dtContacts.Rows.Count != 0) { m_rowPosition = m_dtContacts.Rows.Count-1; this.ShowCurrentRecord(); }

  18. 레코드 편집하기 • DataAdapter의 Update()를 호출하여 변경된 내용의 DataTable을 전달할 때까지, 변경 내용은 원본 데이터 소스에 반영되지 않음 • 새로운 버튼을 추가하고, 버튼의 속성을 다음과 같이 설정 • Save 버튼을 더블클릭하고, Click 이벤트에 다음 코드 추가 // 데이터가 존재하면 업데이트한다. if (m_dtContacts.Rows.Count !=0) { m_dtContacts.Rows[m_rowPosition]["ContactName"]= txtContactName.Text; m_dtContacts.Rows[m_rowPosition]["State"] = txtState.Text; m_daDataAdapter.Update(m_dtContacts); }

  19. 새로운 데이터 만들기 • DataTable에 새로운 레코드를 추가하려면 NewRow() 메서드를 호출하고, 컬럼에 값을 지정한 후, DataTable의 RowCollection에서 Add() 메서드 호출 • 폼에 그룹 상자를 추가하고, 속성을 다음과 같이 설정 • 그룹 상자에 텍스트 상자를 추가하고 속성을 다음과 같이 설정 • 두 번째 텍스트 상자를 그룹 상자에 추가하고, 속성을 다음과 같이 설정 • 그룹 상자에 버튼을 추가하고, 속성을 다음과 같이 설정 그룹상자 속성 첫번째 텍스트 상자 속성 두번째 텍스트 상자 속성 버튼 속성

  20. Add 버튼을 더블클릭하고, 버튼의 Click 이벤트에 다음 코드 추가 DataRow drNewRow = m_dtContacts.NewRow(); drNewRow["ContactName"] = txtNewContactName.Text; drNewRow["State"] = txtNewState.Text; m_dtContacts.Rows.Add(drNewRow); m_daDataAdapter.Update(m_dtContacts); m_rowPosition = m_dtContacts.Rows.Count-1; this.ShowCurrentRecord();

  21. 레코드 삭제하기 • DataTable에서 레코드를 삭제하려면 삭제하고자 하는 DataRow에서 Delete() 메서드 호출 • 폼에 새로운 버튼을 추가하고, 속성을 다음과 같이 설정 • Delete 버튼을 더블클릭하고, 버튼의 Click 이벤트에 다음 코드 추가 // 데이터가 존재하면 현재 행을 삭제한다. if (m_dtContacts.Rows.Count !=0) { m_dtContacts.Rows[m_rowPosition].Delete(); m_daDataAdapter.Update(m_dtContacts); m_rowPosition=0; this.ShowCurrentRecord(); }

  22. 데이터베이스 예제 완성 결과

More Related