웹 페이지를 개발하면서 대부분 DB쪽의 처리는 Data계층이나 Biz계층의 컴포넌트를 생성해서 사용한다. 특히 기업환경이라면 대략 이런 시나리오로 개발하는 경우가 많다. 이 경우 ASP.NET 2.0에 추가된 SqlDataSource컨트롤은 무용지물이 된다. 이럴 경우에 ObjectDataSource컨트롤을 사용하면 무척 좋다. UI쪽의 코드가 대폭 줄어들면서 기존에 개발할 때 많이 사용하던 다중계층의 컴포넌트를 그대로 사용할 수 있다.
웹 프로젝트에 아래의 클래스를 추가한다. Categories.cs란 파일명으로 추가한다.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public class Categories
{
private SqlConnection conn = new SqlConnection();
private SqlDataAdapter daCate = null;
public Categories()
{
conn.ConnectionString =
ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
daCate = new SqlDataAdapter
("SELECT categoryID, categoryName, description FROM categories", conn);
}
public DataSet SelectAllMethod()
{
//이부분에 Categories 테이블에서 데이터를 가져오는 코드
DataSet ds = new DataSet("northwind");
daCate.SelectCommand.CommandText = string.Format(
"SELECT categoryID, categoryName, description FROM categories ");
daCate.Fill(ds, "Categories");
return ds;
}
public DataRow SelectMethod(int categoryID)
{
//이부분에 Categories 테이블에서 데이터를 가져오는 코드
DataSet ds = new DataSet("northwind");
daCate.SelectCommand.CommandText = string.Format(
"SELECT categoryID, categoryName, desciption FROM categories " +
"WHERE categoryID={0}", categoryID);
daCate.Fill(ds, "Categories");
return ds.Tables[0].Rows[0];
}
public int InsertMethod(int categoryID, string categoryName, string description)
{
//Update 기능을 수행하는 코드 작성
SqlCommand cmd = new SqlCommand();
string sql = "Insert Into Categories(categoryID, categoryName,"
+ "description) values( @categoryID, @categoryName, @description";
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@categoryID", categoryID);
cmd.Parameters.AddWithValue("@categoryName", categoryName);
cmd.Parameters.AddWithValue("@description", description);
conn.Open();
int iRtn = cmd.ExecuteNonQuery();
conn.Close();
return iRtn;
}
public int UpdateMethod(int categoryID, string categoryName, string description)
{
//Update 기능을 수행하는 코드 작성
SqlCommand cmd = new SqlCommand();
string sql = "Update Categories set categoryName=@categoryName, description=@description "
+ "where categoryID=@categoryID";
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@categoryID", categoryID);
cmd.Parameters.AddWithValue("@categoryName", categoryName);
cmd.Parameters.AddWithValue("@description", description);
cmd.CommandType = CommandType.Text;
conn.Open();
int iRtn = cmd.ExecuteNonQuery();
conn.Close();
return iRtn;
}
public int DeleteMethod(int categoryID)
{
//Delete 기능을 수행하는 코드 작성
SqlCommand cmd = new SqlCommand();
string sql = "Delete Categories where categoryID=@categoryID";
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@categoryID", categoryID);
conn.Open();
int iRtn = cmd.ExecuteNonQuery();
conn.Close();
return iRtn;
}
}
기본적으로 CRUD메소드를 가지고 있는 클래스이다. SQL Server 2005 Express에디션을 사용할 수 있도록 했다.
ObjectDataSource컨트롤과 GridView컨트롤을 사용
![](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fblog.dreamwiz.com%2Fusr%2Fp%2Fa%2Fpapasmf1%2F3%2Fpapasmf1_20070821184021_6089846_1.jpg)
ObjectDataSource컨트롤에서 스마트 태그를 클릭해서 메소드들을 맵핑해 준다.
![](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fblog.dreamwiz.com%2Fusr%2Fp%2Fa%2Fpapasmf1%2F3%2Fpapasmf1_20070821184021_6089846_2.jpg)
앞에서 생성한 Categories객체를 선택하면 해당 객체의 메소드들을 다음 화면에서 각 작업에 맞게 선택할 수 있다.
![](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fblog.dreamwiz.com%2Fusr%2Fp%2Fa%2Fpapasmf1%2F3%2Fpapasmf1_20070821184021_6089846_3.jpg)
GridView컨트롤에서는 데이터 소스를 위에서 작업한 ObjectDataSource1컨트롤로 지정한다. SELECT에 SelectAllMethod()를 선택한다. UPDATE에는 UpdateMethod()를, INSERT에는 InsertMethod(), DELETE에는 DeleteMethod()를 각각 선택한다.
![](https://img1.daumcdn.net/relay/cafe/original/?fname=http%3A%2F%2Fblog.dreamwiz.com%2Fusr%2Fp%2Fa%2Fpapasmf1%2F3%2Fpapasmf1_20070821184021_6089846_4.jpg)
GridView컨트롤의 데이터 소스를 ObjectDataSource1컨트롤을 선택한다. 페이징 사용, 정렬 사용, 편집 사용, 삭제 사용등을 선택해서 실행해 본다. SqlDataSoruce컨트롤과는 달리 ObjectDataSource컨트롤의 경우 개발자가 작성한 비즈니스계층의 객체와 연결해서 UI에 대한 처리를 간편하고 강력하게 처리할 수 있는 컨트롤이다.