DAAB(Data Access Application Block) in Enterprise Library 2.0 - (4회)
DAAB(Data Access Application Block) in Enterprise Library 2.0 - (4회) |
| ||||||||||||||||||
[상황별DAAB사용예] [DAAB를사용하기위한준비와기본적인코드를살펴보았고다음에서는Data Access코딩시나올수있는여러상황별로해당상황에서어떻게DAAB를사용해서Data Access코딩을하는지살펴보도록하겠다. 이경우SQL Server 2000이설치되어있다면상관없지만SQL Server 2005가설치되어있다면Northwind Database를설치하도록한다.왜냐하면아래예제코드들에서는Northwind Database내의테이블들을사용하기때문이다. Northwind데이터베이스를SQL Server 2005에설치하려면아래URL에서스크립트를다운로드받아실행하면된다. http://msdn2.microsoft.com/en-us/library/ms143221(SQL.90).aspx]
[ExecuteReader를이용한복수행조회(DbDataReader사용)] [ 빠른 속도로 조회만을 목적으로 여러 행의 데이터를DB에서 불러와 화면에 표시하기를 원하는 경우이다.이 경우Database클래스에서 제공되는ExecuteReader메서드를 사용하여Stored Procedure를 호출하면 된다.Database내에 구현된ExecuteReader는DbDataReader오브젝트를 반환한다. DbDataReader는 데이터 바인딩을 지원하고DataList와DataGrid와 같은 여러 서버 컨트롤의 데이터 소스로 작용할 수 있다. 사용 예제1 - C#) using(IDataReaderdataReader = db.ExecuteReader(CommandType.Text,"Select Name, Address, City From Customers")) { customerGrid.DataSource = dataReader; customerGrid.DataBind(); } 사용 예제2 - C#) stringsqlCommand ="Select CustomerID, Name, Address, City, Country, PostalCode "+ "From Customers"; DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand); using(IDataReaderdataReader = db.ExecuteReader(dbCommand)) { StringBuilder readerData =newStringBuilder(); while(dataReader.Read()) { // Get the value of the Name column in the DbDataReader. readerData.Append(dataReader["Name"]); readerData.Append(Environment.NewLine); } } ]
[ExecuteDataSet를이용한복수행조회(DataSet사용)] [ DataSet은 여러 테이블 혹은 한개의 테이블에서 복수개의 행을 조회한 뒤 조회된 내용을 멀티 티어 어플리케이션에서 티어 간에 전달하는 경우와 같이ADO.NET에서Data Container로서 훌륭한 역할을 수행한다. ExecuteDataSet을 통해 생성된DataSet결과를 재사용하고자 한다면Database클래스에 있는LoadDataSet메서드를 이용하도록 한다. 사용 예제1 - C#) stringsqlCommand ="GetProductsByCategory"; DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); //카테고리7번의 제품 정보 조회. intcategory = 7; db.AddInParameter(dbCommand,"CategoryID",DbType.Int32, category); DataSetproductDataSet = db.ExecuteDataSet(dbCommand); 사용 예제2 - C#) CREATE Procedure GetProductsByCategory 위Stored Procedure가 만들어져 있을 경우Category ID를 인자로 받아서 해당Category의 제품들을 화면에 표시해주는 메서드 예제 publicDataSetGetProductsInCategory(intCategory) { Database db = DatabaseFactory.CreateDatabase(); stringsqlCommand ="GetProductsByCategory"; DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); db.AddInParameter(dbCommand,"CategoryID",DbType.Int32, Category); DataSetproductDataSet =null; productDataSet = db.ExecuteDataSet(dbCommand); resultsDataGrid.SetDataBinding(productDataSet,"Table"); } 참고) ExecuteDataSet과비슷한LoadDataSet이라는함수가있다.이들의차이점은ExecuteDataSet은새로운DataSet을만들지만LoadDataSet은조회결과를기존의DataSet에로드한다는차이점이있다.즉아래예에서command오브젝트를실행한결과를“orders”라는새로운DataTable로orders라는기존DataSet에추가한다. LoadDataSet은직접코딩해보면알겠지만8개의오버로가존재한다. northwind.LoadDataSet(command, orders, "orders"); ]
[커맨트와Output파라미터를이용한특정항목조회(ExecuteNonQuery사용)] [ 특정 상품에 대한 상세 정보 조회와 같은 경우에Stored Procedure를 상품 아이디로 호출하고 여러Output파라미터를 사용하면 원하는 결과를 얻을 수 있다. 사용 예제1 - C#) string sqlCommand = "GetProductDetails"; db.AddInParameter(dbCommand, "ProductID", DbType.Int32, 3); db.AddOutParameter(dbCommand, "QtyPerUnit", DbType.String, 20); db.ExecuteNonQuery(dbCommand); string results = string.Format(CultureInfo.CurrentCulture, "{0}, {1}, {2:C}, {3} ", db.GetParameterValue(dbCommand, "ProductID"), db.GetParameterValue(dbCommand, "ProductName"), db.GetParameterValue(dbCommand, "UnitPrice"), db.GetParameterValue(dbCommand, "QtyPerUnit")); lblResult.Text = results; 사용 예제2 - C#) CREATE PROCEDURE GetProductDetails 위Stored Procedure를 사용하는 예제는 아래와 같다. Database db = DatabaseFactory.CreateDatabase(); string sqlCommand = "GetProductsDetails"; db.AddOutParameter(dbCommand, "QtyPerUnit", DbType.String, 20);db.ExecuteNonQuery(dbCommand); string results = string.Format(CultureInfo.CurrentCulture, "{0}, {1}, {2:C}, {3} ", db.GetParameterValue(dbCommand, "@ProductID"), db.GetParameterValue(dbCommand, "@ProductName"), db.GetParameterValue(dbCommand, "@UnitPrice"), db.GetParameterValue(dbCommand, "@QtyPerUnit")); lblResult.Text = results; ExecuteNonQuery는Inser/Update/Delete수행후에 영향을 받은 행의 수를 리턴한다.위의 경우는Output파라미터를 사용하였으므로 리턴 값은 사용되지 않았다. ] |
출처 : http://www.gosu.net