[ASP.NET] Enterprise Library(Database)

Ceing·2025년 3월 12일
0

ASP.NET

목록 보기
9/13
post-thumbnail

Enterprise Library

  • 순수 ADO.NET을 사용할 경우 Java의 순수 JDBC처럼 직접 커넥션 연결, SQL요청, 결과 매핑 작업을 손수 해야되지만 Enterprise Library를 사용할경우 해당 작업을 하는 개발자의 부담을 덜 수 있음
  • Microsoft가 개발자가 편하게 개발하도록 여러 기능들을 추상화해서 해당 라이브러리를 제공해주는데 지금은 Enterprise Library의 DB 관련 기능에 대해 다뤄보도록 할 것임

Database

개념 및 특징

  • 데이터베이스 작업을 쉽게 수행할 수 있도록 도와주는 클래스이고, ADO.NET을 래핑(Wrapping)하여 간편하게 데이터베이스 처리가 가능한 추상 클래스
  1. DB 연결 관리: SqlConnection을 직접 다룰 필요 없음
  2. SQL 실행 간소화: SQL 객체인 DbCommand를 직접 만들필요 없이 GetSqlStringCommand GetStoredProcCommand 등 API 지원
  3. DBMS 독립성 제공: 다양한 DB 방언(오라클, MySQL, MS-SQL, ...) 통일

생성

Database db = DatabaseFactory.CreateDatabase("DB 이름")

메서드

  • GetSqlStringCommand("query"): SQL을 DbCommand로 변환, DB에 execute 할 수 있게끔

  • GetStoredProcCommand("프로시저명"): 프로시저를 조회해서 DbCommand에 담음
    => Java의 CallableStatement로 프로시저 호출

  • AddInParameter(DbCommand, "프로시저 파라메터명", 파라메터에 할당할 값): 파라메터 할당
    => Java의 CallableStatement로 프로시저에 파라메터 할당

  • ExecuteDataSet(DbCommand): SQL을 DB에 요청해서 결과값을 DataSet으로 리턴받음

  • ExecuteNonQuery(DbCommand): SQL을 DB에 요청 후 영향을 받은 행 수를 리턴
    => Java의 executeQuery 혹은 exeucteUpdate


DbCommand

  • SQL 문(GetSqlStringCommand) 혹은 Stored Procedure(GetStoredProcCommand)을 나타냄

  • 이걸 토대로 DB에 execute 할 수 있음, 일반 String 형태의 쿼리는 불가능함

  • CommonUtil.ToProcParam(DbCommand)으로 DbCommand를 문자열로 변환할 수 있음


DataSet

  • DbCommand를 execute해서(SQL 요청) 나온 결과값을 DataSet으로 담을 수 있음(executeDataSet()), 해당 자료구조에 리턴된 결과값이 담김

  • 조회된 결과를 DataSet으로 담을 수 있음, 저장 프로시저 또한 DB에 DbCommand를 통해 받아서 날릴 수 있으므로 select를 통한 여러 테이블들의 조회된 결과가 DataSet에 담기므로 DataSet은 여러 Table들을 갖는 것, 즉 DataSet.Table[0] DataSet.Table[1], ...의 문법을 갖는 것임

  • In-Memory 데이터베이스(디스크가 아닌 메모리에서 모든 데이터들을 관리)로 여러 테이블들을 한 DataSet 객체 안에서 관리

  • 각 테이블(DataTable)에 접근하려면 dataSet.Tables[0]와 같이 배열 형태로 조회 가능


DataTable

  • DataSet에 저장되는 각각의 테이블(메모리 내 데이터의 한 테이블)을 뜻함
  • DataSet.Tables[n]을 통해 꺼낼 수 있음
  • 단순 SELECT 쿼리만 날리면 당연히 리턴되는 Table은 하나겠지만 프로시저를 날리므로 여러 Table들이 조회될 수 있음에 따라 이와 같은 배열 문법을 ASP.NET에서 제공하는 것

빈 칼럼 추가

//dataTable.Columns.Add(칼럼명, 데이터 타입): 어떤 행이 추가됐는지 DataRow를 리턴함으로써 알 수 있음
dataTable.Columns.Add("AGE", typeof(int))

빈 칼럼에 데이터(Row)들 삽입

foreach(DataRow row in dataTable)
{
	//row[칼럼명] = 데이터;
    row["AGE"] = 20;
}

DataTable의 요소들(DataColumnCollection, DataRowCollection)은 리스트로 구현돼있으므로 컬렉션[인덱스] 와 같은 형태로 접근 가능

모든 행 리턴

DataRow[] drData = dsData.Tables[0].Select();

특정 행만 필터링해서 리턴

// 일부 행 리턴
DataRow[] rows = dataTable.Select(string filterExpression)

DataSet에 담긴 테이블 정보 아는법

MS-SQL을 쓸 경우 SSMS에서 프로시저를 분석하자, SELECT문으로 조회된 순서대로 DataSet의 Tables의 담김

profile
이유에 대해 끊임없이 생각하고 고민하는 개발자

0개의 댓글