'2010/04/02'에 해당되는 글 4건

  1. 2010.04.02 SqlDataAdapter
  2. 2010.04.02 DataSet
  3. 2010.04.02 DataView
  4. 2010.04.02 SqlDataReader 1
2010. 4. 2. 23:42

                                                                                  

 

DataAdapter의 기능

-     데이터베이스의 Connection으로부터 DataSet을 생성하는 중간 역할 담당

-        DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 SQL 명령 집합 및 데이터베이스 연결을 지원하는 클래스

-        DataTable와 같은 비연결 지향적 클래스들이 데이터베이스와 연결

 

-      Command로 작업할 때에는 데이터베이스와 연결된 상태에서 작업

-       DataAdapter로 작업을 할 경우에는 DataSet이라는 결과를 얻은 후에 데이터베이스와의 연결을 끊고, DataSet 자체만으로도 작업을 수행한다.

-       작업이 끝난 후에는 DatatAdapter를 통해 DataSet의 변경된 부분이 실제 데이터베이스에 반영 가능

 


 

 SelectCommand 속성

 

SelectCommand 속성을 이용하여 원본 DB의 데이터 소스에서 레코드를 검색하는데 사용하는 SQL문이나 Proc를 설정할 수 있다.

- SelectCommand 에 설정된 SQL문을 실행했을때 검색결과가 없어서 SelectCommamd가 행을 반환하지 않으면 데이터 셋에 테이블이 추가되지 않는다.

-    SelectCommand 문을 실행해서 나온 결과에 대해서 SqlDataAdapter클래스의 Fill메소드가 데이터 셋에 테이블을 추가하게 된다.

SqlDataAdapter adapter = new SqlDataAdapter();

adapter.SelectCommand = new SqlCommand();

adapter.SelectCommand.Connection = sConnection;

adapter.SelectCommand.CommandText = Query;




 
InsertCommand 속성

 

-    InsertCommand 속성을 이용하면 새로운 레코드를 데이터 소스에 삽입할 SQL 문이나 Proc를 설정할 수 있다.

-    InsertCommand를 이용해서 데이터 셋에 자료를 추가하는 등의 처리를 할 수 있다


adapter.InsertCommand = new SqlCommand();         

 adapter.InsertCommand.Connection = sConnection;

 adapter.InsertCommand.CommandText = Query;

adapter.InsertCommand.Parameters.Add("@name",SqlDbType.VarChar,10,"name");

adapter.Update(ds, "tb_insert");

 

DeleteCommad 속성

 

-   DeleteCommand는 행을 삭제할때 사용되는 속성이다.

-    DeleteCommand 속성을 이용해서 행(레코드)를 데이터 집합으로부터 삭제할 SQL 문이나 Proc를 가져오거나 설정할 수 있다.

adapter.DeleteCommand = new SqlCommand();

adapter.DeleteCommand.Connection=(SqlConnection)adapter.SelectCommand.Connection;

adapter.DeleteCommand = new SqlCommand();

adapter.DeleteCommand.CommandText = strUpdateQurey;

adapter.DeleteCommand.CommandType = CommandType.Text;

 

 UpdateCommand 속성

 

-    작업을 하다보면 여러가지 이유로 입력된 데이터를 수정해야 할 때가 있다.

-    UpdateCommand 속성을 이용하면 데이터 소스에서 레코드를 업데이트 하는데 사용하는 SQL 문이나 Proc를 가져오거나 설정할 수 있다

 

adapter.UpdateCommand = new SqlCommand();

adapter.UpdateCommand.Connection=(SqlConnection)adapter.SelectCommand.Connection;

adapter.UpdateCommand.CommandText = strUpdateQuery;

adapter.UpdateCommand.CommandType = CommandType.Text;

adapter.UpdateCommand.Parameters.Add(myParam);

 

메소드

설명

Fill

데이터 셋의 행을 데이터 소스와 일치하도록 한다.

FillSchema

데이터 셋에 DataTable을 추가하고 데이터 소스의 스키마와 일치하도록 스키마를 구성한다.

Update

데이터 셋과 동일하게 데이터 소스를 업데이트한다.

 

 예제코드

 

string connString = "server = 504-24\\SQL2005;database=tempdb;";

 connString = connString + "uid=Hello;password=dhtlak;";

 SqlConnection sConnection = new SqlConnection(connString);

  SqlDataAdapter adapter = new SqlDataAdapter();

  adapter.SelectCommand = new SqlCommand();

  adapter.SelectCommand.Connection = sConnection;

   String Query = "select * from titile";

   adapter.SelectCommand.CommandText = Query;

   DataSet ds = new DataSet("Mytable");

    adapter.FillSchema(ds, SchemaType.Source, "titile");

    adapter.Fill(ds, "titile");

  DataRow[] r3 = ds.Tables["titile"].Select();

  foreach (DataRow ro in r3)

   {

          Console.WriteLine(ro["titile_id"].ToString() + ro["type"].ToString());

   }

 

 

'.NET > ADO.NET' 카테고리의 다른 글

DB에 이미지 저장 / 로드 하기  (0) 2010.06.18
DB모델링  (0) 2010.05.28
DataSet  (0) 2010.04.02
DataView  (0) 2010.04.02
SqlDataReader  (1) 2010.04.02
Posted by 아몰라
2010. 4. 2. 20:44


DataSet -  여러개의 테이블로 구성되있다.



DataTable의 구성요소

DataRow(행에 대한 정보)
DataColumn(열에 대한 정보)
Constraint(값을 제어하는 규약)
DataRelation(두 테이블 간의 관계)



DataRelation(관계)

- DataColumn 개체를 통해 두 개의 DataTable 개체를 서로 연결하는데 사용

- 부모 및 자식 테이블의 일치하는 열 간에 관계가 만들어짐

- DataSet 내의 한 DataTable에서 다른 DataTable로 이동을 허용





또 다른 예제

static void Main(string[] args)
{
DataSet dataSet = new DataSet("MyData");
DataTable table = new DataTable("MyTable");
DataRow row;

table.Columns.Add("이름", typeof(string));       //컬럼 추가
table.Columns.Add("나이", typeof(int));
table.Columns.Add("학번", typeof(string));

 

//레코드 추가
row = table.NewRow();
row["이름"] = "천정민";
row["나이"] = 26;
row["학번"] = "123456789";
table.Rows.Add(row);

row = table.NewRow();
row["이름"] = "조아라";
row["나이"] = 23;
row["학번"] = "123456789";
table.Rows.Add(row);

row = table.NewRow();
row["이름"] = "안용준";
row["나이"] = 26;
row["학번"] = "987654321";
table.Rows.Add(row);

dataSet.Tables.Add(table);     //DataSet에 테이블 추가

 

//table 테이블 레코드 변경전

Console.WriteLine("table 테이블 레코드 변경전");
DataRow[] r = dataSet.Tables["MyTable"].Select();
foreach (DataRow ro in r)
{
    Console.WriteLine("이름 : " + ro["이름"].ToString() + " 나이 : " + ro["나이"].ToString() + " 학번 : " + ro["학번"].ToString());
}

Console.WriteLine();

 

//table 테이블 레코드변경
dataSet.Tables["MyTable"].Rows[0].Delete();           //테이블 삭제
dataSet.Tables["MyTable"].Rows[0].BeginEdit();        //수정시작
dataSet.Tables["MyTable"].Rows[0]["이름"] = "송창은";   //레코드 값 변경
dataSet.Tables["MyTable"].Rows[0].EndEdit();          //수정끝
dataSet.Tables["MyTable"].Rows[0].AcceptChanges();    //변경된 내용 실행

 

//table 레코드 값 얻어오기
Console.WriteLine("table 레코드 값 변경 후");
DataRow[] r2 = dataSet.Tables["MyTable"].Select();
foreach (DataRow ro in r2)
{
    Console.WriteLine("이름 : " + ro["이름"].ToString() + " 나이 : " +
ro["나이"].ToString() + " 학번 : " + ro["학번"].ToString());
}

Console.WriteLine();

 

//다른 테이블 생성 및 레코드 생성
DataTable OtherTable = new DataTable("OtherTable");
OtherTable.Columns.Add("학번", typeof(string));
OtherTable.Columns.Add("학년", typeof(int));

row = OtherTable.NewRow();
row["학번"] = "123456789";
row["학년"] = 4;
OtherTable.Rows.Add(row);

row = OtherTable.NewRow();
row["학번"] = "123456789";
row["학년"] = 3;
OtherTable.Rows.Add(row);

dataSet.Tables.Add(OtherTable);     //DataSet 추가

 

//OtherTable 레코드 값 얻어오기
Console.WriteLine("OtherTable 레코드 값 출력");
DataRow[] or = dataSet.Tables["OtherTable"].Select();
foreach (DataRow dr in or)
{
    Console.WriteLine("학번 : " + dr[0].ToString() + " 학년 : " + dr[1].ToString());
}

Console.WriteLine();


//pk설정
dataSet.Tables["Mytable"].PrimaryKey = new DataColumn[] { dataSet.Tables["Mytable"].Columns["학번"] };

 

//Relation 설정
DataRelation rel = new DataRelation("Stu", dataSet.Tables["Mytable"].Columns["학번"], dataSet.Tables["OtherTable"].Columns["학번"]);
dataSet.Relations.Add(rel);

 

//Relation 관계에서 부모에 해당하는 Row값으로 자식의 Row값을 출력
Console.WriteLine("Relation 관계에서 부모에 해당하는 Row값으로 자식의 Row값을 검색");
DataRow[] childrow = dataSet.Tables["MyTable"].Rows[0].GetChildRows("Stu");
//부모테이블의 0번째 row를 관계맺은 컬럼을 자식테이블에서 찾아라
foreach (DataRow cr in childrow) //childrow에 있는 값을 DataRow형식으로 가지고 오겠다
{
    Console.WriteLine("학번 : " + cr[0].ToString() + " 학년 : " + cr[1].ToString());
}
Console.WriteLine();

 

//테이블 갯수 출력
Console.WriteLine("테이블 수 : " + dataSet.Tables.Count);

//테이블 명 출력
foreach (DataTable t in dataSet.Tables)
{
    Console.WriteLine("테이블 명 : " + t.ToString());
}
//Console.WriteLine("테이블 명 : " + dataSet.Tables[0]);
//Console.WriteLine("테이블 명 : " + dataSet.Tables[1]);

//컬럼 명 출력
Console.WriteLine("컬럼 명");
foreach (DataColumn dc in dataSet.Tables[0].Columns)
{
    Console.Write(dc.ColumnName + " ");
}
Console.WriteLine();
}

'.NET > ADO.NET' 카테고리의 다른 글

DB모델링  (0) 2010.05.28
SqlDataAdapter  (0) 2010.04.02
DataView  (0) 2010.04.02
SqlDataReader  (1) 2010.04.02
SqlParameter 클래스  (0) 2010.03.31
Posted by 아몰라
2010. 4. 2. 20:21

DataView는 데이터 바인딩 응용 프로그램에서 자주 사용되는 기능으로, 이 기능을 사용하면 DataTable에 저장되어 있는 데이터에 대해 서로 다른 뷰를 만들 수 있습니다. DataView를 사용하여 테이블의 데이터를 다른 정렬 순서로 노출시킬 수 있으며, 행 상태에 따라 또는 필터 식을 기준으로 데이터를 필터링할 수 있습니다.

DataView에서는 원본 DataTable의 데이터에 대한 동적 뷰를 제공합니다. 따라서 변경이 발생할 경우 DataTable의 내용, 순서 및 멤버에 해당 변경 사항이 적용됩니다. 이 동작은 특정 필터 및/또는 정렬 순서에 따라 테이블에서 DataRow 배열을 반환하는 DataTableSelect 메서드와는 다릅니다. 이내용은 원본으로 사용하는 테이블의 변경 사항을 적용하기는 하지만 해당 멤버 및 순서는 정적으로 유지됩니다. DataView의 동적 기능은 데이터 바인딩 응용 프로그램에 사용하기에 아주 적합합니다.

DataView에서는 단일 데이터 집합에 대한 동적 뷰를 제공하는데 이 동적 뷰에는 데이터베이스 뷰와 매우 유사하게 여러 가지 정렬 및 필터링 기준을 적용할 수 있습니다. 그러나 데이터베이스 뷰와 달리 DataView는 테이블로 취급될 수 없고 조인된 테이블의 뷰도 제공할 수 없습니다. 또한 소스 테이블에 있는 열을 제외하거나 계산을 통해 만들어지는 열과 같이 소스 테이블에 없는 열을 추가할 수 없습니다.

DataViewManager를 사용하여 DataSet의 모든 테이블에 대한 뷰 설정을 관리할 수 있습니다.DataViewManager에서는 각 테이블에 대한 기본 뷰 설정을 관리할 수 있는 편리한 방법을 제공합니다. 컨트롤을 둘 이상의 DataSet 테이블에 바인딩할 때는 DataViewManager에 바인딩하는 것이 좋습니다.


예제 - msdn 참고

출처 :  ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ko/wd_adonet/html/0fe5dfa2-c1cd-435f-90b6-b4dd2e3ef34b.htm

'.NET > ADO.NET' 카테고리의 다른 글

SqlDataAdapter  (0) 2010.04.02
DataSet  (0) 2010.04.02
SqlDataReader  (1) 2010.04.02
SqlParameter 클래스  (0) 2010.03.31
SqlCommand 클래스  (0) 2010.03.31
Posted by 아몰라
2010. 4. 2. 19:12
SQlDataReader - SQL Server 데이터베이스 에서 데이터를 가져올수 있게 해주는 클래스



주요 메소드

Close - SqlDataReader 개체를 닫음
NextResult - SqlDataReader를 다음 결과로 이동한다.
Read - SqlDataReader를 다음 레코드로 이동한다.



 string connString = "server = 504-12\\SQL2005;database=tempdb;";

 connString = connString + "uid=Man;password=0000;";
 SqlConnection sConnection = new SqlConnection(connString);
 SqlCommand myCom = new SqlCommand(null, sConnection);

 myCom.Connection = sConnection;

 myCom.CommandText = "select * from j_table";
 myCom.Connection.Open();

SqlDataReader sdr  = myCom.ExecuteReader();

// SqlDataReader를 만들려면, 생성자를 직접 사용하지 않고 SqlCommand 개체의ExcuteReader 메서드를 호출해야 한다.

데이터 가져오는 방법1 - Item 속성 이용

            while (sdr.Read()) //다음 레코드가 없을때까지 계속 돌린다.
            {
                Console.Write("m_id : " + sdr["m_name"].ToString());
                Console.Write("   m_age : " + sdr["m_age"].ToString());
                Console.WriteLine();
            }

데이터 가져오는 방법2 - Get+ 데이터 이용 , 처리효율이 높다!

            while (sdr.Read()) //다음 레코드가 없을때까지 계속 돌린다.
            {
                Console.Write("m_id : " + sdr.GetString(0).ToString());
                Console.Write("   m_age : " + sdr.GetInt16(0).ToString());
                Console.WriteLine();
            }                       
            
            sdr.Close();   // SqlDataReader를 사용하고있으면 SqlConnection에서 다른 작업을 할 수 없으므로 Close메소드를 호출해준다.

            myCom.CommandText = "select count(*) from j_table";
            Console.WriteLine("count : " + myCom.ExecuteScalar().ToString());  //쿼리를 실행한 결과를 반환
            myCom.Connection.Close();

'.NET > ADO.NET' 카테고리의 다른 글

DataSet  (0) 2010.04.02
DataView  (0) 2010.04.02
SqlParameter 클래스  (0) 2010.03.31
SqlCommand 클래스  (0) 2010.03.31
Connetion  (0) 2010.03.31
Posted by 아몰라
이전버튼 1 이전버튼