1 / 48

17 장 . ADO.NET

C#. 17 장 . ADO.NET. DB 사용하기 위한 방법 ( 초기 ). SQL 서버. 오라클. DBLib. OCI. SQL 서버용 응용 프로그램. ORACLE 응용 프로그램. DB 사용하기 위한 방법. ADO.NET. ADO. OLE DB. ODBC. ODBC : 열린 접속 환경 제공 C 언어 위주의 함수 호출 구조 OLE DB : COM 프로토콜에 기반하며 메일이나 파일 시스템 등 비관계형 데이터에도 접속할 수 있는 방법 제공 기능적으로 완벽하였으나 , 너무 복잡함

penney
Télécharger la présentation

17 장 . ADO.NET

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. C# 17장. ADO.NET

  2. DB 사용하기 위한 방법(초기) SQL 서버 오라클 DBLib OCI SQL 서버용 응용 프로그램 ORACLE 응용 프로그램

  3. DB 사용하기 위한 방법 ADO.NET ADO OLE DB ODBC ODBC : 열린 접속 환경 제공 C 언어 위주의 함수 호출 구조 OLE DB : COM 프로토콜에 기반하며 메일이나 파일 시스템 등 비관계형 데이터에도 접속할 수 있는 방법 제공기능적으로 완벽하였으나, 너무 복잡함 ADO : OLE DB를 쉽게 쓸 수 있도록 래핑한 것(성능에 문제발생) ActiveX Data Objects ADO.NET : ADO 가 닷넷 환경에 맞게 업그레이드 된 것

  4. ADO.NET 구조 SQL 서버 SQL Server Provider ADO.NET 오라클 응용 프로그램 ORACLE Provider MySQL ODBC Provider Access OLE DB Provider

  5. ADO.NET 개요 • ADO.NET • ADO(ActiveX Data Objects) + .NET • ADO.NET의 개선 사항 • 닷넷 기반의 다양한 언어 지원 • XML 지원 • 프레임웍 상에서 일관된 포맷으로 지원 • 단절된 데이터 구조를 표준으로 사용 • 컨넥션(Connection)이 끊어진 상태에서 작업, 소형 메모리 데이터베이스 모델 지원 • ADO.NET 관련 네임스페이스 • System.Data • System.Data.Common • System.Data.Oledb • System.Data.SqlClient

  6. ADO.NET 의 기본 구조 1 .NET Data Provider Command DataReader 연결지향 Database Connection DataAdapter DataSet 비연결지향 XML DataSet

  7. ADO.NET 의 기본 구조 2 XML 문서 Connection 공급자(Provider) Command DataSet SqlClient OleDb OracleClient Odbc Database DataReader DataAdapter 7

  8. Connection과 데이터 공급자 • SqlClient공급자 • SQL Server 공급자(SqlClient)는 OLE와 ODBC와 같은 중간계층 없이 MS-SQL 전용으로 직접 연결되기 때문에 간단하며 효율적으로 동작한다. • Microsoft SQL Server 버전 7.0 이상에 연결한다. • OleDb공급자 • OLE DB 공급자는 OLE DB를 사용해서 노출된 데이터 소스 및 Microsoft SQL Server 버전 6.x 또는 그 이전 버전에 SQLOLEDB 즉 SQL Server용 OLE DB 공급자를 통해 연결한다. • ODBC 공급자(.NET Framework 2.0에 추가된 공급자) • ODBC를 사용해서 노출된 데이터 소스에서 사용한다. • System.Data.Odbc • Oracle 공급자(.NET Framework 2.0에 추가된 공급자) • 오라클 데이터 소스에서 사용한다.(오라클 클라이언트 소프트웨어 버전 8.1.7 이상에서 지원) • System.Data.Oracle

  9. 연결 문자열 using System.Data.SqlClient; SqlConnectionconn = new SqlConnection("Data Source=(local);Initial Catalog=ADOTest; User ID=sa;Password=csharp777"); conn.open(); using System.Data.OleDb; OleDbConnection con = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:/NWind.mdb"); conn.open();

  10. 연결 설정 • SQL DB 연결 순서 • 1. 네임스페이스 명시 • using System.Data.SqlClient; • 2. Connection 객체 생성(연결 프로퍼티 설정) • SqlConnectionconn; • conn = new SqlConnection("Server=localhost; user id=sa;password=csharp777; database=ADOTest"); • 3. Connecton연결 • conn.Open(); • 4. 작업수행( SQL 쿼리 작업) • 5. 연결 닫기 • conn.Close(); • Connection의 속성 • conn.Database • conn.DataSource • conn.ServerVersion • conn.State • conn.WorkstationId

  11. DB 생성(ADOTest) SQL Server Management Studio 클릭

  12. 연결 클릭

  13. 새 데이터베이스 클릭

  14. 테이터베이스 이름 : ADOTest입력 확인 클릭

  15. 데이터베이스 확장 추가된 ADOTest DB 확인

  16. sa패스워드 변경 속성 클릭(sa)

  17. sa패스워드 변경 암호 입력(csharp777) 확인 클릭

  18. 연결 테스트 /** SqlClient Connection 설정 테스트 **/ using System; using System.Data; using System.Data.SqlClient; class ConnectionTest { public static void Main(string[] args) { string strConn = "server=brain;database=ADOTest;user id=sa; password=csharp777"; SqlConnectionconn = new SqlConnection(strConn); conn.Open();// Open Connection Console.WriteLine("1. Database = " + conn.Database); Console.WriteLine("2. DataSource = " + conn.DataSource); Console.WriteLine("3. DataServerVersion = " + conn.ServerVersion); Console.WriteLine("4. State = " + conn.State); Console.WriteLine("5. WorkstationID = " + conn.WorkstationId); conn.Close();// Close Connection Console.WriteLine("6. State = " + conn.State); }

  19. sqlCommand클래스 • SqlCommand클래스 • DB에 필요한 명령을 전달하거나 그 결과를 받아올 때 사용하는 클래스 • SqlCommand에서 사용할 수 있는 명령들 • 단일 값 및 레코드 셋을 반환하는 SELECT, CREATE, ALERT, DROP 같은 DLL(Data Definition Language) 명령 • GRANT, DENY, REVOKE 같은 DCL(Data Control Language) 명령 • INSERT, UPDATE, DELETE 같은 DML(Data Modification Language) 명령 • SqlCommand클래스 주요 함수 • ExecuteNonQuery() • SQL 문을 실행하고 처리된 행의 개수를 반환 • ExecuteReader() • 쿼리를 Connection에 보내고 SqlDataReader를 생성 • ExecuteScalar() • 쿼리를 실행하고 쿼리에서 반환된 결과 집합의 첫번째 행의 첫번째 열 반환 • ExecuteXmlReader() • 쿼리를 Connection에 보내고 XmlReader객체를 생성

  20. sqlCommand의 ExecuteNonQuery • ExecuteNonQuery() • 데이터베이스의 쿼리(Query) 중 Select 명령을 제외한 대부분의 명령을 처리할 수 있다. • ExecuteNonQuery()의 사용 • Connection 생성 및 Open • string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • SqlCommnad생성 • string createQuery = "create table Address ( id int, name char(20), addr char(40))"; • SqlCommandcomm = new SqlCommand(createQuery, conn); • SqlCommand실행 • comm.ExecuteNonQuery(); • Connection Close • conn.Close();

  21. sqlCommand의 ExecuteNonQuery( Address 테이블 생성후 자료 입력) /** SqlCommand의ExecuteNonQuery() **/ using System; using System.Data; using System.Data.SqlClient; class CommandNonQueryTest { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string createQuery = "create table Address ( id int, name char(20), addr char(40))"; string query1 = "Insert into Address values (1, '김삿갓', '서울시')"; string query2 = "Insert into Address values (2, '홍길동', '부산시')"; string query3 = "Insert into Address values (3, '춘향이', '광주시')"; string query4 = "Insert into Address values (4, '개똥이', '대구시')"; string query5 = "Insert into Address values (5, '김선달', '대전시')"; • //1. Connection 생성과 Open • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • //2. Command 생성 • SqlCommandcomm = new SqlCommand(createQuery, conn); • SqlCommand comm1 = new SqlCommand(query1, conn); • SqlCommand comm2 = new SqlCommand(query2, conn); • SqlCommand comm3 = new SqlCommand(query3, conn); • SqlCommand comm4 = new SqlCommand(query4, conn); • SqlCommand comm5 = new SqlCommand(query5, conn); • //3. Command 수행 • comm.ExecuteNonQuery(); • comm1.ExecuteNonQuery(); • comm2.ExecuteNonQuery(); • comm3.ExecuteNonQuery(); • comm4.ExecuteNonQuery(); • comm5.ExecuteNonQuery(); • //4. Connection Close • conn.Close(); • } • }

  22. 결과 확인 새 쿼리 클릭

  23. 쿼리문 입력USE ADOTest;select * from dbo.Address; 실행 클릭 결과 확인

  24. sqlCommand의 Parameter(Insert문장) • SqlCommand의 Parameter • 반복적인 쿼리 작업이나 쿼리가 복잡할 경우에 주로 사용한다. • Parameter 변수를 선언하는 방법 • string query ="Insert into Address values (@ID, @Name, @Address)"; • SqlCommandcomm = new SqlCommand(query, conn); • Parameter 타입을 지정하는 예 • comm.Parameters.Add("@ID", SqlDbType.TinyInt); • comm.Parameters.Add("@Name", SqlDbType.Char); • comm.Parameters.Add("@Address", SqlDbType.Char); • Parameter의 값 설정 • comm.Parameters["@ID"].Value = 6; • comm.Parameters["@Name"].Value = "HongGilDDong"; • comm.Parameters["@Address"].Value = "Seoul"; • SqlCommand의 실행 • comm.ExecuteNonQuery();

  25. sqlCommand의 Parameter(Insert문장)

  26. sqlCommand의 Parameter(Insert문장) /** SqlCommand의 Parameter 이용 I **/ using System; using System.Data; using System.Data.SqlClient; public class CommandParamTest { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string query = "Insert into Address values (@ID, @Name, @Address)"; //1. Connection 생성과 Open SqlConnectionconn = new SqlConnection(conStr); conn.Open(); //2. Command 생성 SqlCommandcomm = new SqlCommand(query, conn); //3. Command의 Parameter Type설정 comm.Parameters.Add("@ID", SqlDbType.TinyInt); comm.Parameters.Add("@Name", SqlDbType.Char); comm.Parameters.Add("@Address", SqlDbType.Char); //4. Command의 Parameter 값설정과 명령 실행1 comm.Parameters["@ID"].Value = 6; comm.Parameters["@Name"].Value = "HongGilDDong"; comm.Parameters["@Address"].Value = "Seoul"; comm.ExecuteNonQuery(); //5. Command의 Parameter 값설정과 명령 실행2 comm.Parameters["@ID"].Value = 7; comm.Parameters["@Name"].Value = "MR.Kim"; comm.Parameters["@Address"].Value = "Pusan"; comm.ExecuteNonQuery(); //6. Connection Close conn.Close(); } }

  27. 결과 조회

  28. 비주얼 스튜디오에서 새 쿼리 클릭

  29. SqlCommand의 SqlDataReader Connection SqlDataReader Database SqlCommand(Select 문장) ExecuteReader()의 호출 SqlCommand의 ExecuteReader • SqlCommand의 ExecuteReader() • Select 쿼리를 처리할 때 사용하는 함수 • SqlDataReader를 얻기 위한 절차 • 1. 네임스페이스 명시 • using System.Data.SqlClient; • 2. Connection 객체 생성 : 생성자에게 연결 정보 전달, 연결 프로퍼티 설정 • SqlConnectionconn = new SqlConnection(Server=localhost; user id=sa; password=; database=northwind"); • 3. Connecton연결 • conn.Open(); • 4. Command 객체 생성 : 실행할 쿼리와 Connection을 인수로 함 • SqlCommandcomm = new SqlCommand("select * from 테이블명", conn); • 5. 데이터 읽어오기 • SqlDataReader reader = comm.ExecuteReader(); • 6. 작업수행 • 7. 연결 닫기 • conn.Close();

  30. ExecuteReader() 예제 /** ExecuteReader()를 테스트하는 예제 **/ using System; using System.Data.SqlClient; public class CommandReader { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string query = "select * from Address"; SqlConnectionconn = new SqlConnection(conStr); conn.Open(); SqlCommandcomm = new SqlCommand(query, conn); SqlDataReadersr = comm.ExecuteReader(); while (sr.Read()) { Console.Write(sr.GetInt32(0) + "|"); Console.Write(sr.GetString(1).Trim() + "|"); Console.Write(sr.GetString(2)); Console.WriteLine(); } sr.Close(); conn.Close(); } }

  31. SqlCommand의 Parameter(Select문장) • 데이터베이스 Connection 생성과 Open • string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; • string query = "select * from Address where addr=@addr1 or addr=@addr2"; • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • Command 생성과 Parameter 타입 지정 • SqlCommandcomm = new SqlCommand(query, conn); • comm.Parameters.Add("@addr1", SqlDbType.Char); • comm.Parameters.Add("@addr2", SqlDbType.Char); • Command의 Parameter 값 설정 • comm.Parameters["@addr1"].Value = "서울시"; • comm.Parameters["@addr2"].Value = "대전시"; • 데이터 읽어오기 • SqlDataReadersr = comm.ExecuteReader(); • while(sr.Read()){ • Console.WriteLine(sr.GetInt32(0)+"|"+ sr.GetString(1).Trim()+"|"+ sr.GetString(2) ); • } • SqlDataReader와 Connection 닫기 • sr.Close(); • conn.Close();

  32. SqlCommand의 Parameter(Select문장) /** SqlCommand의 파라미터 이용 **/ using System; using System.Data; using System.Data.SqlClient; public class CommandParamTest2 { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string query = "select * from Address where addr=@addr1 or addr=@addr2"; SqlConnectionconn = new SqlConnection(conStr); conn.Open(); SqlCommandcomm = new SqlCommand(query, conn); comm.Parameters.Add("@addr1", SqlDbType.Char); comm.Parameters.Add("@addr2", SqlDbType.Char); comm.Parameters["@addr1"].Value = "서울시"; comm.Parameters["@addr2"].Value = "대전시"; SqlDataReadersr = comm.ExecuteReader(); while (sr.Read()) { Console.Write(sr.GetInt32(0) + "|"); Console.Write(sr.GetString(1).Trim() + "|"); Console.Write(sr.GetString(2)); Console.WriteLine(); } sr.Close(); conn.Close(); } }

  33. SqlCommand를 이용한 XmlReader • Connection 생성과 Open • string conStr = "Server=localhost;user id=sa;password=;database=northwind"; • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • Command 생성 및 처리 그리고 XmlReader얻기 • string xquery = "select * from Address FOR XML AUTO, ELEMENTS"; • SqlCommandxcomm = new SqlCommand(xquery, conn); • XmlReader reader = reader = xcomm.ExecuteXmlReader(); • 그 외의 작업 • while (reader.Read()){ • //작업 • } • reader.Close(); • conn.Close(); 컬럼 이름을 태그의 이름을 사용해서 XML 데이터를 구축한다.(RAW, AUTO, EXPLICIT) SqlCommand로 작업후 Reader들 SqlDataReader SqlConnection Database SqlCommand XmlReader

  34. SqlCommand를 이용한 XmlReader /** XMLReader를 사용하는 예제 **/ using System; using System.Data; using System.Data.SqlClient; using System.Xml; class CommandXmlTest { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string xquery = "select * from Address FOR XML AUTO, ELEMENTS"; SqlConnectionconn = new SqlConnection(conStr); conn.Open(); SqlCommandxcomm = new SqlCommand(xquery, conn); XmlReader reader = null; try { reader = xcomm.ExecuteXmlReader(); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: Console.Write("<{0}>", reader.Name); break; case XmlNodeType.Text: Console.Write(reader.Value.Trim()); break; case XmlNodeType.EndElement: Console.WriteLine("</{0}>", reader.Name); break; } } } catch (Exception e) { Console.WriteLine(e.Message); } finally { reader.Close(); conn.Close(); } } }

  35. DataSet과 DataAdapter

  36. DataSet과 DataAdapter .NET 데이터 공급자 DataSet DataTableCollection Connection DataAdapter DataTable Transaction SelectCommand DataRowCollection InsertCommand Command DataColumnCollection UpdateCommand Transaction ConstraintCollection DeleteCommand DataReader DataRelationCollection Database XML

  37. .Net에서 이용되는 데이터 구조 DataReader Command 연결지향 Database DataSet Connection DataAdapter 비연결지향

  38. update() DataAdapter SelectCommand InsertCommand DataSet UpdateCommand DeleteCommand Fill() FillSchema() DataAdapter속성과 함수 • DataAdapter 속성 • DeleteCommand • 삭제 명령을 사용하는 Command 필드 • InsertCommand • 입력 명령을 사용하는 Command 필드 • SelectCommand • 조회 명령을 사용하는 Command 필드 • UpdateCommand • 수정 명령을 사용하는 Command 필드 • DataAdapter 주요 함수 • Fill() • 데이터 원본에 있는 데이터를 DataSet의 DataTable에 넣어준다. • FillSchema() • 데이터 원본의 스키마에 맞게 DataSet에 DataTable을 생성한다. • Update() • DataSet의 DataTable에서 변경된 데이터를 원본에 반영시킨다.

  39. DataTable DataTable DataTable .Net DataSet 구성요소 DataRow DataRow DataRow DataColumn DataColumn DataColumn Constraint Constraint Constraint DataRelation DataRelation DataRelation DataTable DataRow DataColumnCollection DataColumnCollection DataSet의 개념상의 구성요소 DataTableCollection DataColumn DataSet Constraint DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRelation DataRowCollection DataColumnCollection DataColumn DataColumn DataColumn DataTable DataRow DataTable DataTable DataRow DataTable DataRow DataSet의 구성요소 39

  40. DataSet의 계층구조 DataSet DataColumnCollection DataColumnCollection DataTableCollection DataTable DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRowCollection DataColumn DataRow

  41. DataSet을 만드는 방법 I • Connection 생성 및 Open • string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • DataAdapter생성 • SqlDataAdapter adapter = new SqlDataAdapter(); • SqlCommand할당 • string query = "select * from Address"; • adapter.SelectCommand = new SqlCommand(query, conn); • DataSet생성 • DataSetds = new DataSet(); • DataAdapter를 이용해서 DataSet채우기 • adapter.Fill(ds); • 작업수행 • 연결 닫기 • conn.Close(); 41

  42. DataSet만들기 /** DataAdapter를 이용해서DataSet만들기 I **/ using System; using System.Data; using System.Data.SqlClient; public class AdapterHandleTest { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string query = "select * from Address"; //1. Connenction생성과 Open SqlConnectionconn = new SqlConnection(conStr); conn.Open(); //2. SqlDataAdapter생성 SqlDataAdapter adapter = new SqlDataAdapter(); //3. Adapter에SelectCommand할당 adapter.SelectCommand = new SqlCommand(query, conn); //4. DataSet생성 DataSetds = new DataSet(); //5. Adapter를 통해서DataSet채우기 adapter.Fill(ds); //6. Connection 닫기 conn.Close(); } }

  43. DataAdapter를 생성할 때 디폴트 생성자를 사용한 후 sqlCommand를 할당 DataSet으로 작업하기 • Connenction생성과 Open • string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • SqlDataAdapter생성 • SqlDataAdapter adapter = new SqlDataAdapter(); • Adapter에 SelectCommand할당 • string query = "select * from Address"; • adapter.SelectCommand = new SqlCommand(query, conn); • DataSet생성 • DataSetds = new DataSet(); • Adapter를 통해서 DataSet채우기 • adapter.Fill(ds); • Connection 닫기 • conn.Close(); • DataSet으로 작업하기 • DataTable table= ds.Tables[0]; • DataRowCollection rows = table.Rows; • foreach (DataRowdr in rows){ • for (inti = 0; i<table.Columns.Count; i++) • Console.Write("{0,15}",dr[i]); • Console.WriteLine(); • } DataSet의 계층구조 DataSet DataColumnCollection DataColumnCollection Tables DataTableCollection DataTable DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataColumnCollection DataRowCollection DataColumn DataRow Rows Columns 43

  44. DataSet의 사용을 보여주는 예제 /** DataSet의 사용을 보여주는 예제 **/ using System; using System.Data; using System.Data.SqlClient; public class DataSetHandleTest { public static void Main() { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; string query = "select * from Address"; //1. Connenction생성과 Open SqlConnectionconn = new SqlConnection(conStr); conn.Open(); //2. SqlDataAdapter생성 SqlDataAdapter adapter = new SqlDataAdapter(); //3. Adapter에SelectCommand할당 adapter.SelectCommand = new SqlCommand(query, conn); //4. DataSet생성 DataSetds = new DataSet(); //5. Adapter를 통해서DataSet채우기 adapter.Fill(ds); //6. Connection 닫기 conn.Close(); //7. DataSet으로 작업하기 DataTable table = ds.Tables[0]; DataRowCollection rows = table.Rows; foreach (DataRowdrin rows) { for (int i = 0; i < table.Columns.Count; i++) Console.Write("{0,15}", dr[i]); Console.WriteLine(); } } }

  45. DataAdapter에 SQL 쿼리와 Connection을 매개 변수로 사용하는 방법 DataSet을 만드는 방법 II • Connection 생성 및 Open • string conStr = "Server=localhost;user id=sa;password=;database=northwind"; • SqlConnectionconn = new SqlConnection(conStr); • conn.Open(); • DataSet만들기 • SqlDataAdapter adapter = new SqlDataAdapter("select * from Address", conn); • DataSetds = new DataSet("MyAddressDataSet");//DataSet의 이름 • adapter.Fill(ds);//테이블의 이름 • conn.Close(); • DataSet으로 작업하기 • DataTable table = ds.Tables[0]; • DataRowCollection rows = table.Rows; • foreach (DataRowdr in rows){ • for (inti = 0; i<table.Columns.Count; i++) • Console.Write("{0,15}",dr[i]); • Console.WriteLine(); • } SqlDataAdapter adapter = new SqlDataAdapter(); string query = "select * from Address"; adapter.SelectCommand = new SqlCommand(query, conn); DataSet ds = new DataSet(); 45

  46. DataSet을 만드는 방법 2 /** DataAdapter를 이용해서DataSet만들기 II **/ using System; using System.Data; using System.Data.SqlClient; public class AdapterHandleTest2 { public static void Main(string[] args) { string conStr = "Server=localhost;user id=sa;password=csharp777;database=ADOTest"; SqlConnectionconn = new SqlConnection(conStr); conn.Open(); SqlDataAdapter adapter = new SqlDataAdapter("select * from Address", conn); DataSet ds = new DataSet("MyAddressDataSet");//DataSet의 이름 adapter.Fill(ds);//테이블의 이름 conn.Close(); DataTable table = ds.Tables[0]; DataRowCollection rows = table.Rows; foreach (DataRowdrin rows) { for (int i = 0; i < table.Columns.Count; i++) Console.Write("{0,15}", dr[i]); Console.WriteLine(); } } }

  47. DataColumnCollection DataColumnCollection DataTableCollection DataSet의 Update() • DataSet에서 InsertCommand 명령을 수행하는 방법 • DataSet 자체에 레코드를 삽입한다. • DataAdapter에 SqlCommand를 지정한다. • DataAdapter를 이용해서 DataSet을 데이터베이스로 업데이트한다. DataSet의 InsertCommand 명령 수행 DataSet Database DataAdapter에 SqlCommand 지정 DataRow 2 1 DataTable (Insert 문장) 새로운 Row 삽입 DataRow row = table.NewRow(); row["id"] = "8"; row["name"] = "Uncle"; row["addr"] = "Ameria"; table.Rows.Add(row); 3 DataAdpater를 이용해서 Update() 47

  48. SqlDataAdapter adapter = new SqlDataAdapter("select * from Address", conn); • DataSetds = new DataSet("MyAddressDataSet");//DataSet의 이름 • adapter.Fill(ds, "Address");//테이블의 이름 • conn.Close(); • DataTable table = ds.Tables["Address"]; • //1. DataRow생성하여 Row를 삽입하기 • DataRow row = table.NewRow(); • row["id"] = "8"; • row["name"] = "Uncle"; • row["addr"] = "Ameria"; • table.Rows.Add(row); • //2. SqlCommand지정하기 • conn.Open(); • string strSql="Insert into Address(id, name, addr)values(@id, @name, @addr)"; • adapter.InsertCommand = new SqlCommand(strSql, conn); • adapter.InsertCommand.Parameters.Add("@id", SqlDbType.TinyInt, 0, "id"); • adapter.InsertCommand.Parameters.Add("@name", SqlDbType.Char, 20, "name"); • adapter.InsertCommand.Parameters.Add("@addr", SqlDbType.Char, 40, "addr"); • //3. DataAdapter를 이용하여 DataSet업데이트하기 • adapter.Update(ds, "Address"); • conn.Close(); • 연결형으로 처리하는 것 고려 • 모든 자료를 client로 down하여 • 1건을 입력하여 처리하는 것은 비효율적임

More Related