2016년 12월 26일 월요일

[닷넷교육,C#교육,실무교육학원추천_탑크리에듀][예제]DataSet, DataTable에서 find 및 삭제예제

using System; 
using System.Data; 
using System.Data.OleDb; 

class Example 

        public static void Main() 
        { 
                string ConStr = ("Provider=MSDAORA;data source=bitcamp2;User ID=scott;Password=tiger"); 
                OleDbConnection Conn = new OleDbConnection(ConStr); 

                //Conn.Open(); 

                //갱신 및 기타 작업을 위한 Adapter를 하나 만든다. 
                OleDbDataAdapter adapter = new OleDbDataAdapter("select empno, ename from EMP", Conn); 

                //CommandBuilder 개체를 이용하여 SQL 명령을 만든다. 
                OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); 

                //관련된 데이터 테이블들, 행, 열을 담을 DataSet 개체를 만든다. 
                DataSet ds = new DataSet(); 

                //DataAdapter를 이용하여 DataSet 에 데이터를 채운다. 
                adapter.Fill(ds, "EMP"); 

                //데이터를 화면에 출력 하자. 
                foreach (DataRow r in ds.Tables["EMP"].Rows) 
                { 
                        Console.WriteLine("EMPNO : {0}, ENAME : {1}", r["empno"], r["ename"]); 
                } 
                Console.WriteLine(" 총 {0} 건 입니다." , ds.Tables["EMP"].Rows.Count); 


                //DataCulumn 배열을 이용하여 기본키를 설정 한다 
                //Find를 사용하기 위해 기본키를 설정, 키를 설정 할려면 컬럼의 배열에 담아야 한다. 
                //그런다음 그 배열을 PrimaryKey 속성에 배정한다. 
                DataColumn[] keys = new DataColumn[1]; 
                keys[0] = ds.Tables["EMP"].Columns["empno"]; 
                ds.Tables["EMP"].PrimaryKey = keys; 

                /* 위의것과 또 다른 방법으로 데이터베이스로 부터 직접 기본키 정보를 얻을 수 * 있는데 이 경우엔 DataSet을 채우기 전에 명시적으로 키 정보를 빼먹지 말고* 가지고 오라고 해야 한다. 
                * adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; 
                * adapter.Fill(ds, "학생") 
                * 이렇게 하면 DataTable의 PrimaryKey 속성을 직접 설정 한 것과 동일한 효과를 얻는다 
                */ 


                //Find는 DataRow 객체를 반환한다. 사번이 8888인것을 검색 
                DataRow findrow = ds.Tables["EMP"].Rows.Find(8888); 

                if (findrow != null) 
                { 
                        findrow.Delete(); 
                        adapter.Update(ds, "EMP"); 

                        //데이터를 화면에 출력 하자. 
                        foreach (DataRow r in ds.Tables["EMP"].Rows) 
                        { 
                                Console.WriteLine("EMPNO : {0}, ENAME : {1}", r["empno"], r["ename"]); 
                        } 
                        Console.WriteLine(" 총 {0} 건 입니다." , ds.Tables["EMP"].Rows.Count); 
                } 

        } 





=================================================== 

[결과] 

EMPNO : 7369, ENAME : 오라클자바 
EMPNO : 7499, ENAME : ALLEN 
EMPNO : 7521, ENAME : WARD 
EMPNO : 7566, ENAME : JONES 
EMPNO : 7654, ENAME : MARTIN 
EMPNO : 7698, ENAME : BLAKE 
EMPNO : 7782, ENAME : CLARK 
EMPNO : 7788, ENAME : SCOTT 
EMPNO : 7839, ENAME : KING 
EMPNO : 7844, ENAME : TURNER 
EMPNO : 7876, ENAME : ADAMS 
EMPNO : 7900, ENAME : JAMES 
EMPNO : 7902, ENAME : FORD 
EMPNO : 7934, ENAME : MILLER 
EMPNO : 9999, ENAME : 9길동 
EMPNO : 8888, ENAME : 9길동 
EMPNO : 7777, ENAME : 9길동 
 총 17 건 입니다. 
EMPNO : 7369, ENAME : 오라클자바 
EMPNO : 7499, ENAME : ALLEN 
EMPNO : 7521, ENAME : WARD 
EMPNO : 7566, ENAME : JONES 
EMPNO : 7654, ENAME : MARTIN 
EMPNO : 7698, ENAME : BLAKE 
EMPNO : 7782, ENAME : CLARK 
EMPNO : 7788, ENAME : SCOTT 
EMPNO : 7839, ENAME : KING 
EMPNO : 7844, ENAME : TURNER 
EMPNO : 7876, ENAME : ADAMS 
EMPNO : 7900, ENAME : JAMES 
EMPNO : 7902, ENAME : FORD 
EMPNO : 7934, ENAME : MILLER 
EMPNO : 9999, ENAME : 9길동 
EMPNO : 7777, ENAME : 9길동 
 총 16 건 입니다. 

댓글 없음:

댓글 쓰기