* "윈폼"에서 '새 프로젝트 만들기'로 프로젝트 실행



==> Form1.cs [디자인]







-------------------------------------------------------------------------------------




==> Form1.cs




using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace MakeTable

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private DataTable dt; //

        private void tblPeople_Click(object sender, EventArgs e)

        {

            dt = MakePeopleTable(); //

            dataGridView1.DataSource = dt; //

        }

 

        private DataTable MakePeopleTable()

        {

            DataTable tblPeople = new DataTable("tblPeople");

 

            DataColumn col;

            DataRow row;

 

            // 열 등록

            col = new DataColumn("Name", typeof(String));

            col.MaxLength = 10;

            col.AllowDBNull = false;

            col.Unique = true;

            tblPeople.Columns.Add(col);

 

            tblPeople.PrimaryKey = new DataColumn[] { col };

 

            col = new DataColumn("Age", typeof(Int32));

            col.AllowDBNull = false;

            tblPeople.Columns.Add(col);

 

            col = new DataColumn("Male", typeof(bool));

            col.AllowDBNull = false;

            tblPeople.Columns.Add(col);

 

            // 행 삽입

            row = tblPeople.NewRow();

            row["Name"] = "정우성";

            row["Age"] = 36;

            row["Male"] = true;

            tblPeople.Rows.Add(row);

 

            row = tblPeople.NewRow();

            row["Name"] = "고소영";

            row["Age"] = 32;

            row["Male"] = false;

            tblPeople.Rows.Add(row);

 

            row = tblPeople.NewRow();

            row["Name"] = "배용준";

            row["Age"] = 37;

            row["Male"] = true;

            tblPeople.Rows.Add(row);

 

            row = tblPeople.NewRow();

            row["Name"] = "김태희";

            row["Age"] = 29;

            row["Male"] = false;

            tblPeople.Rows.Add(row);

 

            tblPeople.AcceptChanges();

            return tblPeople;

        }

 

        private void tblSale_Click(object sender, EventArgs e)

        {

            DataTable tblSale = MakeSaleTable();

            dataGridView1.DataSource = tblSale;

        }

 

        private DataTable MakeSaleTable()

        {

            DataTable tblSale = new DataTable("tblSale");

 

            DataColumn col;

            DataRow row;

 

            //열 등록

            col = new DataColumn("OrderNo", typeof(Int32));

            col.AllowDBNull = false;

            col.Unique = true;

            col.AutoIncrement = true;

            col.ReadOnly = true;

            tblSale.Columns.Add(col);

 

            tblSale.PrimaryKey = new DataColumn[] { col };

 

            col = new DataColumn("Customer", typeof(String));

            col.MaxLength = 10;

            col.AllowDBNull = false;

            tblSale.Columns.Add(col);

 

            col = new DataColumn("Item", typeof(String));

            col.MaxLength = 20;

            col.AllowDBNull = false;

            tblSale.Columns.Add(col);

 

            col = new DataColumn("ODate", typeof(DateTime));

            col.AllowDBNull = false;

            tblSale.Columns.Add(col);

 

            // 행 삽입

            row = tblSale.NewRow();

            row["Customer"] = "정우성";

            row["Item"] = "면도기";

            row["ODate"] = new DateTime(2008, 1, 1);

            tblSale.Rows.Add(row);

 

            row = tblSale.NewRow();

            row["Customer"] = "고소영";

            row["Item"] = "화장품";

            row["ODate"] = new DateTime(2008, 1, 2);

            tblSale.Rows.Add(row);

 

            row = tblSale.NewRow();

            row["Customer"] = "김태희";

            row["Item"] = "핸드폰";

            row["ODate"] = new DateTime(2008, 1, 3);

            tblSale.Rows.Add(row);

 

            row = tblSale.NewRow();

            row["Customer"] = "김태희";

            row["Item"] = "휘발유";

            row["ODate"] = new DateTime(2008, 1, 4);

            tblSale.Rows.Add(row);

 

            tblSale.AcceptChanges();

            return tblSale;

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            // 1 2열짜리 테이블 만들기 : 홍길동, 백두산

            DataTable dt = new DataTable();

 

            DataRow dr = dt.NewRow(); // 팩터리 메서드???

 

            // 열 하나 만들기

            DataColumn dc = new DataColumn("Name", typeof(String)); // VarChar

            dc.MaxLength = 25; // VarChar(25)

            dc.AllowDBNull = false; // Not Null

 

            // 테이블에 열을 추가

            dt.Columns.Add(dc);

 

            // 행 하나 만들기

            dr["Name"] = "홍길동";

            dt.Rows.Add(dr);

 

            this.dataGridView1.DataSource = dt; // 데이터테이블 바인딩...

 

        }

 

        private void DisplayResult(DataRow[] Result)

        {

            listBox1.Items.Clear();

            foreach (DataRow R in Result)

            {

                listBox1.Items.Add(R["Name"]);

            }

        }

 

        private void btnAsc_Click(object sender, EventArgs e)

        {

            // 오름차순 정렬

            DataRow[] Result = dt.Select("", "Name Asc");

            DisplayResult(Result); // 출력

        }

 

        private void btnDesc_Click(object sender, EventArgs e)

        {

            DataRow[] Result = dt.Select("", "Name Desc"); // "Select메서드" RowFilter + Sort 속성 둘 다 가지고 있다.

            DisplayResult(Result); // 출력

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

 

        }

 

        private void btnFind_Click(object sender, EventArgs e)

        {

            // 이름 가져오기

            string name = textName.Text;

            DataRow Result = dt.Rows.Find(name); // 고유키에서 특정 레코드 찾기

            if (Result == null)

            {

                MessageBox.Show("해당 사람이 없습니다.");

            }

            else

            {

                MessageBox.Show(name + "의 나이 : " + Result["Age"].ToString());

            }

        }

 

        private void btnSelect_Click(object sender, EventArgs e)

        {

            DataRow[] Result = dt.Select("Age >= " + textAge.Text);

            DisplayResult(Result); // 출력

        }

 

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            DataRow[] arr = dt.Select("Name = '" + textName2.Text + "'");

            if (arr.Length != 0)

            {

                arr[0]["Age"] = Convert.ToInt32(textAge2.Text);

            }

            this.dataGridView1.DataSource = dt;

        }

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            DataRow[] arr = dt.Select("Name = '" + textName3.Text + "'");

            if (arr.Length != 0)

            {

                arr[0].Delete(); // 현재 레코드 삭제

            }

            this.dataGridView1.DataSource = dt;

        }

 

        private void btnAccept_Click(object sender, EventArgs e)

        {

            dt.AcceptChanges(); // 변경완료

        }

 

        private void btnReject_Click(object sender, EventArgs e)

        {

            dt.RejectChanges(); // 변경취소

        }

    }

}

 

 

// "Select메서드" "다중값" 반환  / "Find메서드" "단일값(1개 레코드값)" 반환.

// "Select메서드" DataRow를 반환한다.

// "Select메서드" 2가지 속성(RowFilter속성과 Sort 속성)을 가지고 있다.

 

 

 


-------------------------------------------------------------------------------------




[ 실행결과 ]








Posted by holland14
:


==> [FrmDataTableSelect.aspx] 소스 및 디자인

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmDataTableSelect.aspx.cs" Inherits="FrmDataTableSelect" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        <asp:ListBox ID="lstCategoryList" runat="server" Rows="5"></asp:ListBox>

   

    </div>

    </form>

</body>

</html>

 


--> "ListBox"를 사용했음.







-------------------------------------------------------------------------------------




==> [FrmDataTableSelect.aspx.cs]

using System;

using System.Data.SqlClient;

using System.Configuration;

using System.Data;

using System.Web.UI.WebControls;

 

public partial class FrmDataTableSelect : 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);

        SqlCommand cmd = new SqlCommand(

            "Select CategoryID, CategoryName From Categories", con);

        SqlDataAdapter da = new SqlDataAdapter(cmd);

        DataSet ds = new DataSet();

        da.Fill(ds, "Categories");

        DataTable dt = ds.Tables[0];

 

        // 가전이면서, CategoryID에 내림차순으로 출력

        DataRow[] arr = //dt.Select("CategoryName Like '%가전%'", "CategoryID Desc");

        dt.Select("", "CategoryID Desc"); // RowFilter속성과 Sort속성의 기능 합침

 

        // 반복하면서 출력

        for (int i = 0; i < arr.Length; i++)

        {

            this.lstCategoryList.Items.Add(

                new ListItem(

                    arr[i]["CategoryName"].ToString(), arr[i]["CategoryID"].ToString()));

        }

    }

}

 

 

 

 

// DataTable..::.Select 메서드 - 모든 DataRow 개체의 배열을 가져옵니다.

 

 


-------------------------------------------------------------------------------------



[실행결과]

--> DataTable..::.Select 메서드와 "ListBox"를 사용하여 [SQL Server] - [데이터베이스] - [Market데이터베이스]내에 있는 [dbo.Categories]테이블의 모든데이터 중 "CategoryName"을 웹페이지에서 "CategoryID"의 내림차순으로 정렬하여 (ListBox에)모두 출력하였다.






Posted by holland14
:

==> [FrmSqlParameter.aspx] 소스 및 디자인



<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmSqlParameter.aspx.cs" Inherits="FrmSqlParameter" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        카테고리 추가 :

        <asp:TextBox ID="txtCategoryName" runat="server"></asp:TextBox>

        <asp:Button ID="btnAdd" runat="server" Text="추가" onclick="btnAdd_Click" />

        <br />

        <br />

        <asp:GridView ID="ctlCategoryList" runat="server">

        </asp:GridView>

   

    </div>

    </form>

</body>

</html>

 











-------------------------------------------------------------------------------------




==> [FrmSqlParameter.aspx.cs]




using System;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;

 

public partial class FrmSqlParameter : 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 Categories", con);

        SqlDataAdapter da = new SqlDataAdapter(cmd);

        DataSet ds = new DataSet();

        da.Fill(ds, "Categories");

        this.ctlCategoryList.DataSource = ds.Tables[0];

        this.ctlCategoryList.DataBind();

        con.Close();

    }

 

    protected void btnAdd_Click(object sender, EventArgs e)

    {

        SqlConnection con = new SqlConnection();

        con.ConnectionString =

            ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

        con.Open();

 

        SqlCommand cmd = new SqlCommand();

        cmd.Connection = con;

        cmd.CommandText = "Insert Into Categories(CategoryName) Values(@CategoryName)";

        cmd.CommandType = CommandType.Text;

 

        // 파라미터 추가하는 첫번째 방법

        //cmd.Parameters.AddWithValue("@CategoryName", txtCategoryName.Text);

 

        // 파라미터 추가하는 두번째 방법

        //cmd.Parameters.Add("@CategoryName", SqlDbType.VarChar, 50);

        //cmd.Parameters["@CategoryName"].Value = txtCategoryName.Text;

 

        // 파라미터 추가하는 세번째 방법 - SqlParameter 클래스 사용 : SP OUTPUT매개변수 처리시 주로 사용

        SqlParameter parameterCategoryName =

            new SqlParameter("@CategoryName", SqlDbType.VarChar, 50);

        parameterCategoryName.Direction = ParameterDirection.Input; // 입력용

        parameterCategoryName.Value = txtCategoryName.Text;

        cmd.Parameters.Add(parameterCategoryName);

       

        cmd.ExecuteNonQuery();

        con.Close();

        DisplayData(); // 새로 출력

    }

}

 

 

 

 

// SqlParameter 클래스 - SqlCommand에 대한 매개 변수를 나타내고 DataSet 열에 대한 매개 변수의 매핑을 선택적으로 나타냅니다. 이 클래스는 상속될 수 없습니다.

 

 

 


-------------------------------------------------------------------------------------




[실행결과]


--> 아래그램에서 "SqlParameter클래스"를 사용하여 웹페이지에서 '텍스트박스'에 문자열을 입력하고 '추가'버튼을 누르면(Insert), [SQL Server] - [데이터베이스] - [Market 데이터베이스]의 [dbo.Categories]테이블에 입력했던 "CategoryName"이 테이블의 맨아래 추가되어 웹페이지의 "GridView"에도 출력된다.(아래그림에서는 입력한 "CategoryName"은 "Pro ASP.NET"이다.)





Posted by holland14
:

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

 

RowFilter : 데이터 검색시 사용하는 속성 : "CategoryName Like '%컴퓨터%'"

- Connection -> Command -> DataAdapter -> DataSet -> DataTable -> DataView ->

DataView.RowFilter 속성




-------------------------------------------------------------------------------------




==> [FrmRowFilter.aspx] 소스 및 디자인

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmRowFilter.aspx.cs" Inherits="FrmRowFilter" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        카테고리명 :

        <asp:TextBox ID="txtSearchQuery" runat="server"></asp:TextBox>

        <asp:Button ID="btnSearch" runat="server" Text="검색" onclick="btnSearch_Click" />

        <br />

        <asp:GridView ID="ctlSearchList" runat="server">

        </asp:GridView>

   

    </div>

    </form>

</body>

</html>

 

 

 


-------------------------------------------------------------------------------------

 


==> [FrmRowFilter.aspx.cs]


 

using System;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;

 

public partial class FrmRowFilter : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void btnSearch_Click(object sender, EventArgs e)

    {

        SqlConnection con = new SqlConnection(

            ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        con.Open();

        SqlCommand cmd = new SqlCommand("Select * From Categories", con);

        cmd.CommandType = CommandType.Text;

        SqlDataAdapter da = new SqlDataAdapter(cmd);

        DataSet ds = new DataSet();

        da.Fill(ds, "Categories");

 

        //[1] DataTable로 변환

        DataTable dt = ds.Tables[0];

 

        //[2] Dataview로 변환

        DataView dv = dt.DefaultView;

 

        //[3] DataView.RowFilter로 필터링

        dv.RowFilter = "CategoryName Like '%" + txtSearchQuery.Text + "%'";

        dv.Sort = "CategoryName Asc"; // 정렬

        this.ctlSearchList.DataSource = dv; // 필터링된 리스트만 출력됨.

        this.ctlSearchList.DataBind();

 

        con.Close();

    }

}

 

 

 

 

// DataView..::.RowFilter 속성 - DataView에 표시할 행을 필터링하는 데 사용하는 식을 가져오거나 설정합니다.

 

 

 

-------------------------------------------------------------------------------------

 

 

[실행결과]

--> 웹페이지에서 '텍스트박스'에 [SQL Server] - [Market]데이터베이스 - [dbo.Categories]테이블에 존재하는 "CategoryName"의 '전체' 또는 '일부'를 입력한 후 "검색"버튼을 누르면...





--> 아래그림과 같이 텍스트박스에 입력한 단어가 포함된 "CategoryName"이 "GridView"에 출력되는 것을 볼 수 있다.

 

--> 텍스트박스에 아무것도 입력하지 않고 '검색'버튼을 누르면 아래그림과 같이 [SQL Server] - [Market]데이터베이스 - [dbo.Categories]테이블에 존재하는 모든 데이터가 "CategoryName"의 오름차순으로 정렬되어 웹페이지의 "GridView"에 출력된다.




Posted by holland14
:


==> [FrmDataRow.aspx] 소스 및 디자인

  

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmDataRow.aspx.cs" Inherits="FrmDataRow" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        카테고리 리스트 출력<br />

        <br />

        <asp:DropDownList ID="lstCategoryList" runat="server">

        </asp:DropDownList>

   

    </div>

    </form>

</body>

</html>

 

 

 

 


-------------------------------------------------------------------------------------

 


==> [FrmDataRow.aspx.cs]

 


using System;

using System.Data.SqlClient;

using System.Configuration;

using System.Data;

using System.Web.UI.WebControls;

 

 

public partial class FrmDataRow : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        SqlConnection con = new SqlConnection(

            ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        con.Open();

 

        SqlCommand cmd = new SqlCommand("Select * From Categories", con);

        cmd.CommandType = CommandType.Text;

 

        SqlDataAdapter da = new SqlDataAdapter(cmd);

 

        DataSet ds = new DataSet();

 

        da.Fill(ds, "Categories");

 

        #region 직접바인딩

        ////[!] 드롭다운리스트에 바인딩

        //this.lstCategoryList.DataSource = ds;

        //this.lstCategoryList.DataTextField = "CategoryName";

        //this.lstCategoryList.DataValueField = "CategoryID";

        //this.lstCategoryList.DataBind();

        #endregion

 

        // List<T>와 같은 방법으로 출력

        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

        {           

            DataRow dr = ds.Tables[0].Rows[i]; // 한개 레코드를 DataRow에 담기

            // Text : 카테고리명, Value : 카테고리ID로 출력

            lstCategoryList.Items.Add(

                new ListItem(dr["CategoryName"].ToString(), dr["CategoryID"].ToString()));

        }

 

        con.Close();

    }

}

 

 

 

 

// DataRow 클래스 - DataTable의 데이터 행을 나타냅니다.

 

 


 

-------------------------------------------------------------------------------------


 

[실행결과]


--> "DataRow"클래스와 "드롭다운리스트"를 사용하여 웹페이지에 출력하였다.


 


Posted by holland14
:


- DataView : DB
View 같은 역할

 


-------------------------------------------------------------------------------------

 


==> [FrmDataView.aspx] 소스 및 디자인

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmDataView.aspx.cs" Inherits="FrmDataView" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        상품 리스트 출력<br />

        <br />

        <asp:GridView ID="ctlProductList1" runat="server">

        </asp:GridView>

        <asp:GridView ID="ctlProductList2" runat="server">

        </asp:GridView>

        <asp:GridView ID="ctlProductList3" runat="server">

        </asp:GridView>

   

    </div>

    </form>

</body>

</html>

 

 

 


-------------------------------------------------------------------------------------

 


==> [FrmDataView.aspx.cs]

 


using
System;

using System.Data.SqlClient;

using System.Configuration;

using System.Data;

 

 

public partial class 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();

 

        con.Close();

    }

}

 

 

 

 

// DataView 클래스 - 정렬, 필터링, 검색, 편집 및 탐색을 위해 데이터 바인딩할 수 있는 DataTable의 사용자 지정 뷰를 나타냅니다.

 


 

-------------------------------------------------------------------------------------

 

[실행결과]

--> "DataView"클래스와 "GridView" 3개를 사용하여 [SQL Server] - [Market]데이터베이스 내에 있는 [dbo.Products]테이블을 3가지 방법으로 출력하였다.
 

 

'.NET프로그래밍 > ADO.NET' 카테고리의 다른 글

22. DataView..::.RowFilter 속성  (0) 2009.09.28
21. DataRow 클래스  (0) 2009.09.28
19. DataTable 클래스  (0) 2009.09.28
18. DataSet 클래스  (0) 2009.09.28
17. SqlTransaction 클래스 / TransactionScope 클래스  (0) 2009.09.28
Posted by holland14
:


DataTable :
메모리상의 테이블, , DB Table개체와 일대일로 매핑할 있는 그릇(클래스)
 - Rows Columns 가짐

 


-------------------------------------------------------------------------------------

 


==> [FrmDataTable.aspx] 소스 및 디자인

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmDataTable.aspx.cs" Inherits="FrmDataTable" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <p>

        &nbsp;</p>

    <form id="form1" runat="server">

    <div>

   

        카테고리<asp:GridView ID="ctlCategoryList" runat="server">

        </asp:GridView>

        <br />

        <br />

        상품<asp:GridView ID="ctlProductList" runat="server">

        </asp:GridView>

        <br />

   

    </div>

    </form>

</body>

</html>

 

 

 



-------------------------------------------------------------------------------------

 


==> [FrmDataTable.aspx.cs]


 

using System;

using System.Configuration;

using System.Data;

using System.Data.SqlClient;

 

 

public partial class 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] 데이터셋 : Database

        DataSet ds = new DataSet(); // 한개 이상의 테이블을 담을 수 있는 그릇

 

        //[5] Fill()

        da.Fill(ds, "Market");

 

        //[6] 데이터테이블 : Table

        DataTable dt1 = ds.Tables[0]; // Categories

        DataTable dt2 = ds.Tables[1]; // Products

 

        //[7] GridView에 바인딩

        this.ctlCategoryList.DataSource = dt1; ctlCategoryList.DataBind();

        this.ctlCategoryList.DataSource = dt2; ctlProductList.DataBind();

 

        //[8] 마무리

        con.Close();

    }

}

 

 

 

 

 

// DataTable 클래스 - 메모리에 있는 데이터로 구성된 하나의 테이블을 나타냅니다.

 

 

 

-------------------------------------------------------------------------------------

 

 [실행결과]

--> "DataTable"클래스와 "GridView" 2개를 사용하여 웹페이지에서 [SQL Server]내의 [Market]데이터베이스 안에 있는 [dbo.Categories]테이블과 [dbo.Products]테이블을 출력하였다.
  

 

'.NET프로그래밍 > ADO.NET' 카테고리의 다른 글

21. DataRow 클래스  (0) 2009.09.28
20. DataView 클래스  (0) 2009.09.28
18. DataSet 클래스  (0) 2009.09.28
17. SqlTransaction 클래스 / TransactionScope 클래스  (0) 2009.09.28
16. 수정(Modify) / 삭제(Delete)  (0) 2009.09.28
Posted by holland14
:

 

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




-------------------------------------------------------------------------------------




==> [FrmDataSet.aspx] 소스 및 디자인



<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmDataSet.aspx.cs" Inherits="FrmDataSet" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        <asp:GridView ID="ctlCategoryList" runat="server">

        </asp:GridView>

   

    </div>

    </form>

</body>

</html>

 










-------------------------------------------------------------------------------------




==> [FrmDataSet.aspx.cs]




using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Configuration;

using System.Data.SqlClient;

using System.Data;

 

public partial class 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);

 

            //[1] SqlDataAdapter 클래스의 인스턴스 생성

            SqlDataAdapter da = new SqlDataAdapter();

            da.SelectCommand = cmd;

 

            //[2] DataSet 클래스의 인스턴스

            DataSet ds = new DataSet();

 

            //[3] da.Fill() 메서드로 데이터셋 채우기

            da.Fill(ds, "Categories");

 

            //[4] GridView에 바인딩

            ctlCategoryList.DataSource = ds;

            ctlCategoryList.DataBind();

        }

    }

}

 

 

 

 

// DataSet 클래스 - 메모리 내의 데이터 캐시를 나타냅니다.
// DataSet 클래스 : 메모리상의 데이터베이스(엄청나게 큰 규모의 클래스, 가장 막강한 클래스 중의 하나이다. 1개 이상의 테이블이 올 수 있다.)

// SqlDataAdapter 클래스 - DataSet를 채우고 SQL Server 데이터베이스를 업데이트하는 데 사용할 데이터 명령 집합과 데이터베이스 연결을 나타냅니다. 이 클래스는 상속될 수 없습니다.
// "SqlDataAdapter 클래스"를 사용하면 SqlConnection을 Open, Close 하지 않아도 된다.(SqlDataAdapter 클래스가 con.Open()메서드와 con.Close()메서드의 기능을 포함하고 있다.)

 

// 페이징 처리는 DataSet으로 처리해야 한다. DataReader로는 페이징 처리가 안된다.

// DataSet은 엄청 무거운 그릇이다.

// DataSet 1개 이상의 테이블을 담아놓을수 있다.

 

 

 



-------------------------------------------------------------------------------------





[실행결과]

--> "DataSet 클래스"와 "GridView"를 사용하여 [SQL Server] - [Market]데이터베이스 - [dbo.Categories]테이블을 출력한 화면



Posted by holland14
:

 

트랜잭션 처리 - 한번에(버튼 한번 클릭으로) 여러 개의 CRUD 처리

Update

Delete



-------------------------------------------------------------------------------------




==> [FrmSqlTransaction.aspx] 소스 및 디자인




<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmSqlTransaction.aspx.cs" Inherits="FrmSqlTransaction" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

        <asp:Button ID="btnCommand" runat="server" Text="업데이트 및 삭제"

            onclick="btnCommand_Click" />

       

        <asp:Button ID="btncmdCommand" runat="server" Text="삭제+삭제"

            onclick="btncmdCommand_Click" />

       

        <br />

        <asp:Label ID="lblError" runat="server" ForeColor="Red"></asp:Label>

       

    </div>

    </form>

</body>

</html>

 









-------------------------------------------------------------------------------------




==> [FrmSqlTransaction.aspx.cs]




using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Configuration;

using System.Data.SqlClient;

using System.Transactions;

 

public partial class FrmSqlTransaction : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void btnCommand_Click(object sender, EventArgs e)

    {

        string updateQuery =

            "Update Categories Set CategoryName = '노트북' Where CategoryID = 19";

        string deleteQuery =

            "Delete Categories Where CategoryID >= 20";

 

        using (SqlConnection con = new SqlConnection(

            ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))

        {

            con.Open();

 

            //[1] SqlTransaction 클래스의 인스턴스 생성

            SqlTransaction tran = con.BeginTransaction(); // 트랜잭션 걸기, 괄호안에 이름(별칭)줄 수도 있다.

 

            SqlCommand cmd = new SqlCommand();

            cmd.Connection = con;

            cmd.Transaction = tran; //[2] 현재 명령어에서 사용할 트랜잭션 지정

 

            try

            {

                cmd.CommandText = updateQuery;

                cmd.ExecuteNonQuery(); // 수정

 

                cmd.CommandText = deleteQuery;

                cmd.ExecuteNonQuery(); // 삭제

 

                tran.Commit(); // [3] 에러가 발생하지 않으면 커밋

                lblError.Text = "정상 처리";

            }

            catch (Exception ex)

            {

                lblError.Text = ex.Message; // 에러메시지 출력

                tran.Rollback(); //[4] 에러가 발생하면 롤백               

            }

        }

    }

 

    // 트랜잭션 처리하는 2번째 방법

    protected void btncmdCommand_Click(object sender, EventArgs e)

    {

        string updateQuery =

            "Delete Categories Where CategoryID = 7";

        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(); // 완료...

        }

    }

}

 

 

 

 

/*

- SqlTransaction 클래스 - SQL Server 데이터베이스에 만들어질Transact-SQL 트랜잭션을 나타냅니다. 이 클래스는 상속될 수 없습니다.

  응용 프로그램은 SqlConnection 개체의 BeginTransaction을 호출하여 SqlTransaction 개체를 만듭니다.

  트랜잭션과 관련된 모든 후속 작업(예를 들어, 트랜잭션 커밋이나 중단) SqlTransaction 개체에서 수행됩니다.

 

  참고) SqlTransaction을 커밋하거나 롤백할 때는 Try/Catch 예외 처리를 항상 사용해야 합니다. 연결이 종료되었거나 서버에서 트랜잭션이

  이미 롤백된 경우 Commit Rollback은 모두 InvalidOperationException을 생성합니다.

*/

 

/*

- TransactionScope 클래스 - 트랜잭션 코드 블록을 만듭니다. 이 클래스는 상속될 수 없습니다.

  System.Transactions 인프라는 Transaction 클래스 기반의 명시적 프로그래밍 모델과 TransactionScope 클래스를 사용하는 암시적 프로그래밍 모델을 둘 다 제공합니다.

  후자의 경우 인프라에서 자동으로 트랜잭션을 관리합니다.

 

  참고) 앰비언트 트랜잭션 컨텍스트가 자동으로 관리되도록 TransactionScope 클래스를 사용하여 암시적 트랜잭션을 만드는 것이 좋습니다.

  또한 여러 함수 호출이나 여러 스레드 호출에 같은 트랜잭션을 사용해야 하는 응용 프로그램에는 TransactionScope DependentTransaction 클래스를 사용해야 합니다.

*/

 

 





-------------------------------------------------------------------------------------





[실행결과]

--> (트랜잭션)실행하기 전 [SQL Server] - [데이터베이스] - [Market데이터베이스]내의 [dbo.Categories]테이블의 화면.




--> 아래그림의 웹페이지에서 왼쪽에 있는 버튼인 "업데이트 및 삭제"를 누르면 버튼아래에 있는 레이블에서 빨간색 글씨로 "정상 처리"라고 출력되며, [dbo.Categories]테이블의 "CategoryID"가 19번인 데이터의 "CategoryName"이 "컴퓨터"에서 "노트북"으로 수정(Update)되고, "CategoryID"가 20번 이상인 데이터들이 [dbo.Categories]테이블에서 삭제된다.(위에 있는 [FrmSqlTransaction.aspx.cs]코드에서 "btnCommand_Click"이벤트핸들러 코드의 "updateQuery문"과 "deleteQuery문"을 둘다 만족하므로 '에러'가 나지 않고 정상적으로 '업데이트'와 '삭제'가 실행되는 것이다.(= tran.Commit();))




--> [dbo.Categories]테이블에서 "CategoryID"가 19번인 데이터의 "CategoryName"이 "컴퓨터"에서 "노트북"으로 수정(Update)되었고, "CategoryID"가 20번 이상인 데이터들이 [dbo.Categories]테이블에서 삭제되었다.




--> 아래그림의 웹페이지에서 오른쪽에 있는 버튼인 "삭제+삭제"를 누르면 버튼아래에 있는 레이블에서 빨간색 글씨로 "열 이름 'CategoryID2'이(가) 잘못되었습니다."라고 "에러 메시지"가 출력되며, [dbo.Categories]테이블에서 "CategoryID"가 7번인 데이터와 9번인 데이터 둘다 삭제되지 않고 원래상태대로 존재한다. 이는 [FrmSqlTransaction.aspx.cs]코드의 "btncmdCommand_Click"이벤트핸들러 코드에서 "updateQuery문(CategoryID = 7)"은 만족하지만, "deleteQuery문(CategoryID2 = 9)"은 만족하지 않으므로, 결국 하나도 실행되지 않고 모두 "RollBack Tran"되는 것이다. 참고로 "TransactionScope 클래스"는 "Begin Tran / Commit Tran / RollBack Tran"의 기능을 모두 내장하고 있다.)  




--> 아래그림의 [dbo.Categories]테이블에서 "CategoryID"가 7번인 데이터와 9번인 데이터 둘다 삭제되지 되지 않고, 원래상태대로 존재하는 것을 볼 수 있다.













'.NET프로그래밍 > ADO.NET' 카테고리의 다른 글

19. DataTable 클래스  (0) 2009.09.28
18. DataSet 클래스  (0) 2009.09.28
16. 수정(Modify) / 삭제(Delete)  (0) 2009.09.28
[참고] 비동기실행(BeginExecuteNonQuery) - 다중 처리  (0) 2009.09.28
15. 상세보기  (0) 2009.09.28
Posted by holland14
: