using System;
using System.Data.OleDb;
using System.Data;
class DataReaderSample
{
public static void Main()
{
string ConStr = ("Provider=MSDAORA;data source=oraclejava;User ID=scott;Password=tiger");
OleDbConnection Conn = new OleDbConnection(ConStr);
Conn.Open();
//작업을 위한 Adapter를 하나 만든다.
OleDbDataAdapter adapter = new OleDbDataAdapter("select empno, ename from emp", Conn);
DataSet ds = new DataSet();
adapter.Fill(ds,"EMP");
//EMP Table의 내용을 화면에 뿌리자...
foreach (DataRow r in ds.Tables["EMP"].Rows)
{
Console.WriteLine("EMPNO : {0}, ENAME : {1}", r["empno"], r["ename"]);
}
Console.WriteLine();
Console.WriteLine(" 총 {0} 건 입니다." , ds.Tables["EMP"].Rows.Count);
//데이터를 변경
ds.Tables["EMP"].Rows[0]["ename"] = "홍길동";
/*Update Method를 호출 하기 위해 CommandBuilder를 만들자.
하나의 테이블을 갱신하는 간단한 경우 라면 변경용 Query를 사용 할 필요가 없다.
단지 자동적으로 적절한 SQL을 만들고 그것을 관련된 DataAdapter에 연관 시키는
CommandBuilder 개체를 사용하면 된다. CommandBuilder에 DataAdapter를 인자로 주었는데
이렇게 하면 CommandBuilder가 생성될때 생성자에 의해 적절한 SQL 명령문이 만들어지며
그것이 DataAdapter에 연경 된다. */
OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(adapter);
/* Update 메소드는 DataTable의 행들 중 변경된 데이터를 데이터베이스에 적용 한다.
* Rows 컬렉션안의 DataRow 개체에는 RowState 라는 속성이 있는데 이 속성은
* 그 행의 삭제, 추가, 수정 여부를 의미한다.
*/
adapter.Update(ds, "EMP");
//변경 후
Console.WriteLine();
foreach (DataRow r in ds.Tables["EMP"].Rows)
{
Console.WriteLine("EMPNO : {0}, ENAME : {1}", r["empno"], r["ename"]);
}
DataRow row = ds.Tables["EMP"].NewRow();
row["empno"] = "8888";
row["ename"] = "9길동";
ds.Tables["EMP"].Rows.Add(row);
adapter.Update(ds, "EMP");
//추가 후
Console.WriteLine();
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길동
총 16 건 입니다.
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 : 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 건 입니다.
Press any key to continue
댓글 없음:
댓글 쓰기