300 likes | 515 Views
C# Programming Version 2.0 ADO.NET. 김 규 태 ( MCSD .Net, MCSE, MCDBA,SCJP). 학 습 목 표. ADO.NET 개요 ADO.NET 관련 네임스페이스 Data Provider DataBase 연결 (Connection) DataBase 조작 (Command) Data 가져오기 (DataReader) DataTable, DataColumn, DataRow Class DavaView Class DataSet Class
E N D
C# Programming Version 2.0 ADO.NET 김 규 태 (MCSD .Net, MCSE, MCDBA,SCJP)
학 습 목 표 ADO.NET 개요 ADO.NET 관련 네임스페이스 Data Provider DataBase 연결(Connection) DataBase 조작(Command) Data 가져오기 (DataReader) DataTable, DataColumn, DataRow Class DavaView Class DataSet Class DataAdapter Class
1. ADO.NET 개요 (1/2) DataAdpter DataSet WinForm DB WebForm Connection Command Other DataReader Data Provider Data Consumers
1. ADO.NET 개요 (2/2) ADO.NET 아키텍처
2. ADO.NET 관련 네임스페이스 네임스페이스 포함하고 있는 클래스 3. Data Provider 역할 OleDB SQL
4. 데이터베이스 연결(Connection) 1/5 ① Connection 객체 생성 ② 데이터베이스 연결 문자열 지정(DNS) ③ Connection 객체의 Open메서드를 호출해 데이터베이스 연결 ④Connection 객체의 Close메서드를 호출해 데이터베이스 연결해제 속 성 설 명
SqlConnection conn = SqlConnection(); conn.ConnectionString = “Server =localhost;database=PUBS;UID=sa;PWD=;” ; conn.ConnectionString = “Server =localhost;database=PUBS;UID=sa;PWD=;” ; conn.ConnectionString = “Addr=127.0.0.1;InitialCatalog=PUBS;uid=sa;pwd=;“ ; conn.ConnectionString = “dataSource=127.0.0.1;database=PUBS;uid=sa;pwd=;” ; 4. 데이터베이스 연결(Connection) 2/5 • ConnectionString • ConnectionTimeout - 연결할 동안 기다리는 시간(기본값은 15초) - 0으로 설정하면 연결시도를 무기한 대기
4. 데이터베이스 연결(Connection) 3/5 • Connection클래스 멤버 메소드 메서드 설명
4. 데이터베이스 연결(Connection) 4/5 • ex) MS-SQL 연결 using System; using System.Data; using System.Data.SqlClient; class ConsoleConnection { static void Main(string[] args) { SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Server=localhost;database=ADO;uid=sa;pwd=;" ; try { conn.Open(); Console.WriteLine("데이터베이스 연결 성공.."); } catch(Exception ex) { Console.WriteLine("데이터베이스 연결 실패.."); } finally { if(conn != null) { conn.Close(); Console.WriteLine("데이터베이스 연결 해제.. "); } } } }
4. 데이터베이스 연결(Connection) 5/5 • ex) OLE DB 연결 using System; using System.Data; using System.Data.OleDb; class ConsoleConnection2 { static void Main(string[] args) { string source = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\ado.mdb" ; OleDbConnection conn = new OleDbConnection(source); try { conn.Open(); Console.WriteLine("데이터베이스 연결 성공..."); } catch(Exception ex) { Console.WriteLine("데이터베이스 연결 실패..."); } finally { if(conn != null) { conn.Close(); Console.WriteLine("데이터베이스 연결 해제..."); } } } }
5. 데이터베이스 조작(Command) 1/5 ① 데이터베이스연결 : Connection 객체생성 ② 명령 수행 준비 : Command 객체 생성 ③ 속성지정 : Command객체의 CommandText 속성지정 (쿼리, 저장프로시저, 테이블) ④SQL쿼리문 실행 : Execute() 를 통해 쿼리문 실행 Command 클래스 생성자 public SqlCommand(); public SqlCommand(string commandText); public SqlCommand(string commandText, SqlConnection connection); public SqlCommand(string commandText, SqlConnection connection, SqlTransaction transaction );
5. 데이터베이스 조작(Command) 2/5 Command 클래스 속성 속 성 설 명
5. 데이터베이스 조작(Command) 3/5 CommandText SqlCommand cmd = new SqlCommand(); cmd.CommandText = “select * from member where user =“david”; cmd.CommandType = CommandType.Text; CommandType(Text;StroreProcedure;TableDirect) OleDB전용 cmd.CommandText = “member”; cmd.CommandType = CommandType.TableDirect; cmd.CommandText = “select * from member”; cmd.CommandType = CommandType.Text;
5. 데이터베이스 조작(Command) 4/5 Command클래스 멤버 메소드 메서드 설명
5. 데이터베이스 조작(Command) 5/5 CreateParameter 매개변수를 사용하는 쿼리문, 저장 프로시저를 위해 매개변수를 지정할 수 있는 Parameter 개체를 생성할 때 호출 SqlCommand cmd = new SqlCommand(); ........ SqlParameter param = cmd.CreateParameter(); param.ParameterName = “@name”; param.SqlDbType = SqlDbType.Varchar; param.Size = 10; param.Value = “korea”;
6. 데이터 가져오기 (DataReader) 1/4 DataReader 클래스 생성자 public SqlDataReader ExecuteReader(); SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand (“selelct * from member”, conn); SqlDataReader read = cmd.ExecuteReader();
6. 데이터 가져오기 (DataReader) 2/4 DataReader 클래스 속성 속 성 설 명 FieldCount SqlCommand cmd = new SqlCommand(“select * from memner”, conn); SqlDataReader read = cmd.ExcuteReader(); Console.WriteLine(“member의 전체칼럼 개수 : {0}”, read.FieldCount); RecordsAffected SqlCommand cmd = new SqlCommand(“update member set id=david”, conn); SqlDataReader read = cmd.ExcuteReader(); Console.WriteLine(“변경된 레코드 개수 : {0}”, read.RecordsAffected);
6. 데이터 가져오기 (DataReader) 3/4 Item public object this [string name] {get;} //칼럼(필드)명 사용 public object this [int i] {get;} //서수 사용 -> 서수는 0부터 사용 SqlCommand cmd = new SqlCommand(“select * from memner”, conn); SqlDataReader read = cmd.ExcuteReader(); while(read.Read()) { Console.WriteLine(read[“id”] + “\t” + read[“pwd”] + “\t” + read[“name”]); Console.WriteLine(read[0] + “\t” + read[1] + “\t” + read[2]); } read[칼럼명] or read[서수] 두가지 형식으로 사용가능
6. 데이터 가져오기 (DataReader) 4/4 DataReader클래스 멤버 메소드 메서드 설명
7. DataTable, DataColumn, DataRow 클래스 1/5 System.Data 타입 설명 DataColumn User칼럼을 만들고 Type을 System.String형으로 지정할 경우 (1) DataColumn col = new DataColumn(“User”, Type.GetType(“System.String”));
7. DataTable, DataColumn, DataRow 클래스 2/5 DataColumn User칼럼을 만들고 Type을 System.String형으로 지정할 경우 (2) DataColumn col = new DataColumn(); col.DataType = Type.GetType(“System.String”); col.Caption = “데이터칼럼”; col.ColumnName = “User”; col.AllowDBNull = false; col.ReadOnly = true; col.Unique = true; 이름이 NUM이며 Primary Key 속성과 자동증가 속성을 갖는 칼럼 DataColumn col = new DataColumn(); col.ColumnName = “NUM”; col.AutoIncrement = true; col.AutoIncrementSeed = 100; //자동증가초기값을 100으로 col.AutoIncrementStep = 10; //한번에 증가되는 값을 10으로
7. DataTable, DataColumn, DataRow 클래스 3/5 DataRow 클래스 생성자 DataRow row = DataTable.NewRow(); //단독생성 불가 DataRow 클래스 속성 ms-help:// MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataRow_Properties.htm DataRowState 열거형 해당 레코드의 상태를 표시할 때 사용 ms-help:// MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataRowState.htm DataRowState를 사용한 예제 (ex)DataRowExam.cs
7. DataTable, DataColumn, DataRow 클래스 4/5 DataTable 클래스 DataTable은 메모리내에서 존재하는 테이블 DataTable은 직접작성가능하나, Sql서버나 OLE DB에서 만들어진 데이블정보를 DataAdapter 클래스와 DataSet클래스를 참고해 작성 DataTable 클래스 생성자 DataTable table = new DataTable(“Member”); DataTable 클래스 속성 ms-help:// MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataTable_Properties.htm PrimaryKey DataTable table = new DataTable(“member”); DataColumn[] pk = new DataColumn[3]; pk[0] = table.Columns[“ID”]; pk[1] = table.Columns[“PWD”]; pk[2] = table.Columns[“NAME”]; table.PrimaryKey = pk;
7. DataTable, DataColumn, DataRow 클래스 5/5 DataTable 클래스 메서드 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ko/cpref4/html/T_System_Data_DataTable_Methods.htm AcceptChanges() DataTable에 레코드를 추가/갱신/삭제할 경우 내부 데이터는 실제 변경되지 않음 다만, DataRow의 RowState 값만이 변경. 실제 테이블에 변경된 내용을 적용하기 위해 AcceptChanges() 호출
View는 DB안에 실제로 존재하는 Table이 아니라 select쿼리문 형태로 저장되어 있다가 필요할 경우에만 메모리에 생겼다 소멸되는 임시 테이블 View를 이용하면 복잡한 쿼리문을 단순화시켜 개발가능 DB에서의 View 기능을 DataView클래스를 통해 구현 DataView는 DataTable로부터 특정 필드와 레코드 정보를 가져오고, DataGrid 같은 Data Binding 컨트롤에 출력 8. DataView 클래스 DataTable 클래스 생성자 public DataView DataView(DataTable tbl);
9. DataSet 클래스 DataSet 클래스는 비연결 지향상태에서 질의결과 수행 가능 • DataSet = 메모리 DataBase DataSet을 통해 실제 DB의 종류와 상관없이 DataAdapter객체를 통해 메모리상에 해당자료 (테이블, 칼럼, 레코드정보)를 저장 가능 DB에 하나이상의 Table이 있듯이, DataSet은 1개 이상의 DataTable개체를 소유 DataRelation클래스를 이용한 Table간의 관계설정 DataSet data = new DataSet(); DataColumn col_Parents = data.Tables[0].Columns[0]; DataColumn col_Child = data.Tables[1].Columns[0]; DataRelation relation = new DataRelation(“Relation”, col_Parents, col_Child); data.Relation.Add(relation); //data.Relations.Add(“Relation”,data.Tables[0].Columns[0]), data.Tables[1].Columns[0]);
DB에서 읽어오는 시간은 상대적으로 빠름 DB와의 연결상태 유지로 인해 시스템자원 낭비 비 연결지향(DataSet)을 사용할 때 DataAdapter/DataSet을 사용하면 초기 Data 로딩은 느린편 필요한 경우에만 DB와 연결됨으로 인해 시스템 자원 낭비 최소화 10. DataAdapter 클래스 DataAdapter는 DB에서 data를 가져와 DataSet의 DataTable을 생성하고 레코드를 추가 ADO.NET에서 DB의 자료를 가져오는 두가지 방법(DataReader / DataAdapter) 쿼리문을 통해 읽어오는 data는 주로 DataReader사용 DataAdapter / DataSet 은 N-Tier 응용프로그램 개발 / 웹서비스 사용 / 여러 테이블 정보를 동적으로 처리할 경우 Data Cache(메모리 데이터베이스)로 사용할 경우 / XML 문서를 이용한 데이터 처리 등의 경우 주로 사용
10. DataAdapter 클래스 DataReader 클래스 생성자 public SqlDataAdapter(); public SqlDataAdapter(SqlCommand selectCommand); public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection); public SqlDataAdapter(string selectCommandText, string selectConnectionString) 속 성 설 명
10. DataAdapter 클래스 DeleteCommand string sql = “select * from member”; SqlConnection conn = new SqlConnection(“Server=localhost;DataBase=Pubs;uid=sa;pwd=;”); SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); adapter.DeleteCommand = new SqlCommand(“Delete from member where id = “david”, conn) DataReader클래스 멤버 메소드 메소드 설 명