블로그 이미지
Magic_kit
study 관련자료를 한곳으로 자기 개발 목적으로 재태크 재무 관리 목적으로 일상생활의 팁을 공유 하기 위하여 블로그를 개설 하였습니다.

calendar

1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

Category

Recent Post

Recent Comment

Archive

2009. 9. 28. 15:02 .Net Project/ADO.NET 3.5
반응형
3 종류 이용한 메모리상의 데이터 베이스 가져오는 방법
- DataSet
은 데이터 소스에서 검색한 메모리 내의 데이터 캐시이며 ADO.NET 아키텍처 
  의 주요 구성 요소입니다.
- DataTable 
   DataTable
은 ADO.NET 라이브러리의 중심 개체입니다.
    DataTable을 사용하는 다른 개체에는 DataSetDataView가 포함됩니다
- Data View : The following example creates a simple ListBox and a Button

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

public partial class Category_FrmDataView : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DisplayData();
        }
    }
    private void DisplayData()
    {
       //커넥션
        SqlConnection con = new SqlConnection
                   (ConfigurationManager.ConnectionStrings
                    ["ConnectionString"].ConnectionString);

        con.Open();
       
        //커맨드
        SqlCommand cmd = new SqlCommand
                     ("Select *From Products", con);
        //어댑터
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;

        DataSet ds = new DataSet();
        da.Fill (ds,"Products");

        //출력
        this.ctlProductList1.DataSource = ds; //[1]데이터셋
        this.ctlProductList1.DataBind();

        DataTable dt = ds.Tables["Products"]; //[2]데이터테이블
        this.ctlProductList2.DataSource = dt;
        this.ctlProductList2.DataBind();

        DataView dv = ds.Tables[0].DefaultView; //[3]데이터뷰
        this.ctlProductList3.DataSource = dv;
        this.ctlProductList3.DataBind();
    }
}



반응형
posted by Magic_kit
2009. 9. 28. 14:26 .Net Project/ADO.NET 3.5
반응형
 DataTable : 메모리상의 테이블, 즉 DB의 Table개체와 일대일로 매핑할 수 있는 
                 그릇 (클래스)
        -Rows와 Columns 존재

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

public partial class Category_FrmDataTable : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DisplayData();            
        }
    }

    private void DisplayData()
    {
        //[1] 커넥션
        SqlConnection con = new SqlConnection
                (ConfigurationManager.ConnectionStrings
                 ["ConnectionString"].ConnectionString);
       
        con.Open();
                    
        //[2] 커멘드
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "Select *From Categories ;
               Select ProductID, ModelName From Products;";

        //[3] 데이터 어댑터
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd ; //명령어를 담고 있는 커맨드 개체 지정
       
        //[4] 데이터셋
        DataSet ds = new DataSet(); //한개 이상의 테이블을 담을 수 있는 그릇
       
        //[5] Fill()
        da.Fill(ds, "Market");

        //[6] [데이터테이블]
        DataTable dt1 = ds.Tables[0] ; //Categories
        DataTable dt2 = ds.Tables[1] ; //Products

        //[7] GridView 에 바인딩
        this.ctlCategoryList.DataSource = dt1; ctlCategoryList.DataBind();
        this.ctlProductList.DataSource = dt2; ctlProductList.DataBind();

        //마무리
        con.Close();
 
    }
}





반응형
posted by Magic_kit
2009. 9. 28. 14:04 .Net Project/ADO.NET 3.5
반응형

- DataSet : 메모리상의 데이터 베이스, 즉, DB에 있는 한 두개의 테이블을 읽어서
               DataSet 개체에 보관에 놓으면, 마치 물리적인 DB를 메모리에 두고,
               이를 사용해서 손쉽게 DB 입출력 기능을 구현 할 수 있는 막강한
               클래스

- Create a typed TableAdapter object and invoke the fill method

- Create an untyped DataAdapter Object, configur it, and then
   invoke the Fill metod

- SqlDataAdapter Data Display

- 데이터 출력 
   데이터 리더 : SqlConnection -> SqlCommand - > ExecuteReader()
                     -> SqlDataReader -> GridView
   데이터 셋 : SqlConnection -> SqlCommand -> SqlDataAdapter ->
                  ->Fill() -> DataSet -> GridView

using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class Category_FrmDataset : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack) //처음 로드시에만 데이터 읽어서 바인딩
        {
            DisplayData();
        }
    }

    private void DisplayData()
    {
        using (SqlConnection con = new SqlConnection
                  (ConfigurationManager.ConnectionStrings
                   ["ConnectionString"].ConnectionString))
        {
            con.Open();

            SqlCommand cmd = new SqlCommand
                                ("Select *From Categories", con);
           
            //[!]SqlDataAdapter 클래스 인스턴스 생성
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            //[2]Dataset 클래스의 인스턴스
            DataSet ds = new DataSet();
           
            //[3]da.fill()메서드로 데이터 셋 채우
            da.Fill(ds, "Categories");

            //[4]GridVies에 바인딩
            ctlCategoryList.DataSource = ds;
            ctlCategoryList.DataBind();
        }
    }
}





반응형
posted by Magic_kit
2009. 9. 28. 12:19 .Net Project/ADO.NET 3.5
반응형
트랜잭션 시작
API 함수와 Transact-SQL 문을 사용하여 SQL Server 데이터베이스 엔진
인스턴스에서 명시적, 자동 커밋 또는 암시적 트랜잭션을 시작할 수 있습니다.
명시적 트랜잭션
API 함수를 사용하거나 Transact-SQL BEGIN TRANSACTION 문을 실행하여 트랜잭션을 명시적으로 시작합니다.

자동 커밋 트랜잭션
데이터베이스 엔진의 기본 모드입니다. 각 Transact-SQL 문은 완료 시 커밋됩니다. 트랜잭션 제어를 위한 문을 지정하지 않아도 됩니다.

암시적 트랜잭션
API 함수나 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 문을 통해
암시적 트랜잭션 모드를 설정합니다. 다음 문은 자동으로 새 트랜잭션을 시작합니다. 이 트랜잭션이 완료되면 다음 Transact-SQL 문이 새 트랜잭션을 시작합니다.
일괄 처리 범위의 트랜잭션

트랜잭션 모드는 연결 수준에서 관리됩니다. 한 연결에서 트랜잭션 모드가
변경되어도 다른 연결의 트랜잭션 모드에는 영향을 주지 않습니다.



COMMIT 또는 ROLLBACK 문을 사용하거나 API 함수를 통해 트랜잭션을 종료

COMMIT
트랜잭션이 성공하면 커밋합니다. COMMIT 문을 사용하면 모든 트랜잭션 수정이 영구적으로 데이터베이스의 일부로 적용됩니다. COMMIT은 또한 트랜잭션에
사용된 잠금과 같은 리소스를 해제합니다.

ROLLBACK
트랜잭션에서 오류가 발생하거나 사용자가 트랜잭션을 취소하려고 결정한 경우
트랜잭션을 롤백합니다. ROLLBACK 문은 데이터를 트랜잭션이 시작되기 전 상태로 되돌려서 트랜잭션 진행 중 수정된 모든 내용을 취소합니다.
ROLLBACK은 또한 트랜잭션에서 보유 중인 리소스를 해제합니다.

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Transactions; (참조추가 통해서 추가)

public partial class Category_FrmTransaction : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnUpdateDelete_Click(object sender, EventArgs e)
    {
       //수정과 삭제를 동시에 하기 위해서  
        string UpdateQuery =
            "Update Categories Set CategoryName =
                                      '컴퓨터' Where CategoryID = 10";
        string DeleteQuery =
            "Delete Categories Where CategoryID >= 16";

        using (SqlConnection con = new SqlConnection
                                 (ConfigurationManager.ConnectionStrings
                                 ["ConnectionString"].ConnectionString))
        {
            con.Open();

            //[1] sqlTransaction클래스의 인스턴스 생성
            SqlTransaction tran = con.BeginTransaction(""); //트랜잭션 초기화

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            //[2] 현재 명령어에서 사용한 트랜잭션 지정
            cmd.Transaction = tran;
            try
            {
                cmd.CommandText = UpdateQuery;
                cmd.ExecuteNonQuery(); //수정

                cmd.CommandText = DeleteQuery;
                cmd.ExecuteNonQuery(); //삭제
                tran.Commit(); //에러가 발생하지 않으면 실행
                lblError.Text = "정상처리";
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message; //에러가 메시지 출력 
                //에러가 발생하면 롤백
                tran.Rollback();
            }
            
        }
    }
    //삭제 + 삭제
    protected void btnCommand_Click(object sender, EventArgs e)
    {
       
        string UpdateQuery =
            "Delete Categories Where CategoryID = 8";
        string DeleteQuery =
            "Delete Categories Where CategoryID2 = 9";

        //참조추가 -> .NET - > System.Transactions 추가
        using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection con = new SqlConnection
                     (ConfigurationManager.ConnectionStrings 
                     ["ConnectionString"].ConnectionString))
            {
                con.Open();
               
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                              
                try{
                    cmd.CommandText = UpdateQuery;
                    cmd.ExecuteNonQuery(); //수정

                    cmd.CommandText = DeleteQuery;
                    cmd.ExecuteNonQuery(); //삭제

                    lblError.Text = "정상처리";
                }
                catch (Exception ex) {
                    lblError.Text = ex.Message; //에러가 메시지 출력 
                }
                //scope.Complete(); //완료
            }            
        }
    }
}


반응형
posted by Magic_kit