SqlDataAdapter
SqlDataAdapter는 SQL 데이터 소스와 DataSet 간의 연결에 사용합니다. Fill 메서드를 이용하여 데이터 소스의 데이터를 얻어와 DataSet을 채우고 Update 메서드를 이용하여 DataSet의 데이터로 데이터 소스의 데이터를 일치시키게 합니다.
SqlDataDataper에 검색, 추가, 변경, 삭제에 사용할 SqlCommand를 초기에 설정한 후에 데이터 소스의 데이터를 Fill 메서드를 이용해 DataSet을 채우고 이 후에 작업은 DataSet으로 데이터를 관리하다가 데이터 소스를 변경할 필요가 있을 때 Update 메서드를 이용하여 데이터 소스에 반영시키는 것이 일반적인 사용입니다.
▷클래스 상속 계층
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DataAdapter
System.Data.Common.DbDataAdapter
System.Data.SqlClient.SqlDataAdapter
다음은 SqlDataAdapter 클래스에서 제공하는 생성자입니다.
public SqlDataAdapter ( );
public SqlDataAdapter ( SqlCommand sel_command);
public SqlDataAdapter ( string sel_text, SqlConnection con);
public SqlDataAdapter ( string sel_text, string con_str);
SqlDataAdapter 개체는 Fill 메서드를 이용하여 SelectCommand로 탐색 결과를 DataSet 개체의 데이터를 채워줍니다. 이는 데이터 소스인 SQL 서버의 테이블의 데이터로부터 메모리 상의 DataSet 개체의 테이블 데이터를 채워주는 역할을 합니다.
adapter.SelectCommand = new SqlCommand(select * from Books, con);
adapter.Fill(ds,"Books");
다음은 SqlDataAdapter 개체를 생성하여 Books 테이블과 Publishers 테이블의 내용을 DataSet 개체에 반영하는 예제 코드입니다.
static void Main(string[] args) { string constr = @"Data Source=[서버 이름];Initial Catalog=[DB 명]; User ID=[ID];Password=[PW]"; string comtxt_book = "select * from Books;"; string comtxt_pub = "select * from Publishers"; DataSet ds = new DataSet("Library"); using (SqlConnection con = new SqlConnection(constr)) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(comtxt_book, con); adapter.Fill(ds,"Books"); adapter.SelectCommand = new SqlCommand(comtxt_pub,con); adapter.Fill(ds, "Publishers"); ViewDataSet(ds); } } private static void ViewDataSet(DataSet ds) { Console.WriteLine("DataSet 명:{0}", ds.DataSetName); Console.WriteLine("Table 수:{0}",ds.Tables.Count); foreach (DataTable dt in ds.Tables) { ViewDataTable(dt); } } private static void ViewDataTable(DataTable dt) { Console.WriteLine("Table 명:{0}", dt.TableName); foreach (DataRow dr in dt.Rows) { foreach (DataColumn dc in dt.Columns) { Console.Write("{0} ",dr[dc.ColumnName]); } Console.WriteLine(); } } |
[소스] SqlDataAdapter 개체 생성 및 Fill 메서드 사용 예제 코드
[그림] 실행 결과
프로그램 상의 DataSet의 내용을 데이터 소스인 SQL 서버에 반영할 때는 Updata 메서드를 사용합니다.
public int Update ( DataRow[] rows );
public int Update ( DataSet ds );
public int Update ( DataTable dt );
public int Update ( DataSet ds, string table_name );
Update 메서드를 사용하려면 SqlDataAdapter개체의 InsertCommand, DeleteCommand, UpdateCommand 속성에 적절한 SqlCommand 개체를 설정해야 합니다.
string cmd_text = "update Books set Price=@Price where (ISBN = @ISBN)";
SqlCommand cmd = new SqlCommand(cmd_text, con);
cmd.Parameters.Add("@Price", SqlDbType.Int,4,"Price");
cmd.Parameters.Add("@ISBN", SqlDbType.VarChar,50,"ISBN");
DataTable dt_books = ds.Tables["Books"];
foreach (DataRow dr in dt_books.Rows)
{
dr["Price"] = 0;
}
adapter.UpdateCommand = cmd;
adapter.Update(ds, "Books");
다음은 SqlDataAdapter 개체를 생성하여 Books 테이블과 Publishers 테이블의 내용을 DataSet 개체에 반영한 후에 Books 테이블의 모든 책의 가격 정보를 0으로 변경하고 이를 다시 SQL 서버의 Books 테이블에 반영하는 예제 코드입니다.
class Program { static void Main(string[] args) { string constr = @"Data Source=[서버 이름];Initial Catalog=[DB 명]; User ID=[ID];Password=[PW]"; string comtxt_book = "select * from Books;"; string comtxt_pub = "select * from Publishers";
DataSet ds = new DataSet("Library"); using (SqlConnection con = new SqlConnection(constr)) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(comtxt_book, con); adapter.Fill(ds,"Books"); adapter.SelectCommand = new SqlCommand(comtxt_pub,con); adapter.Fill(ds, "Publishers"); ViewDataSet(ds); DataTable dt_books = ds.Tables["Books"]; foreach (DataRow dr in dt_books.Rows) { dr["Price"] = 0; } adapter.UpdateCommand = MakeUpdateCommand(con); adapter.Update(ds, "Books"); Console.WriteLine("----------------"); ViewDataSet(ds); } }
private static SqlCommand MakeUpdateCommand(SqlConnection con) { string cmd_text = "update Books set Price=@Price where (ISBN = @ISBN)"; SqlCommand cmd = new SqlCommand(cmd_text, con); cmd.Parameters.Add("@Price", SqlDbType.Int,4,"Price"); cmd.Parameters.Add("@ISBN", SqlDbType.VarChar,50,"ISBN"); return cmd; } private static void ViewDataSet(DataSet ds) { Console.WriteLine("DataSet 명:{0}", ds.DataSetName); Console.WriteLine("Table 수:{0}",ds.Tables.Count); foreach (DataTable dt in ds.Tables){ ViewDataTable(dt); } } private static void ViewDataTable(DataTable dt) { Console.WriteLine("Table 명:{0}", dt.TableName); foreach (DataRow dr in dt.Rows) { foreach (DataColumn dc in dt.Columns) { Console.Write("{0} ",dr[dc.ColumnName]); } Console.WriteLine(); } } } |
[소스] SqlDataAdapter Update 메서드 사용 예제 코드
[그림] 실행 결과
이상으로 ADO.NET 기술의 소개를 마칠게요. 보다 깊은 학습과 숙련을 하시기 바랍니다.
'프로그래밍 기술 > SQL과 ADO.NET' 카테고리의 다른 글
[ADO.NET] DataView 클래스를 사용 예 - 도서 관리 프로그램 (0) | 2016.04.22 |
---|---|
[ADO.NET] DataView (0) | 2016.04.22 |
[ADO.NET] DataSet과 XML을 이용한 출판사 별 도서 관리 프로그램 만들기 (0) | 2016.04.22 |
[ADO.NET] DataTable 클래스와 XML을 이용한 도서 관리 프로그램 만들기 (0) | 2016.04.22 |
[ADO.NET] DataTable 개체에 행 추가 (0) | 2016.04.22 |
[ADO.NET] DataTable 클래스 개체 생성과 테이블 구조 설계 (0) | 2016.04.22 |
[MSSQL] 저장 프로시저 만들기 실습 (0) | 2016.04.22 |
서버 탐색기를 이용하여 SQL 저장 프로시저 사용하기 (0) | 2016.04.22 |
[ADO.NET] SqlParameter 사용 예 - 저장 프로시저를 이용하여 도서 추가 (0) | 2016.04.22 |
[ADO.NET] SqlParameter 클래스 사용 예 - 도서 추가 (0) | 2016.04.22 |