/// <summary> /// QueryProvider에서 제공하는 Query로 <see cref="DbCommand"/> 인스턴스를 생성합니다. /// </summary> /// <param name="repository">IAdoRepository 인스턴스</param> /// <param name="queryKey">[Section,] QueryName 형태의 쿼리 키</param> /// <param name="parameters">parameter collection</param> /// <returns>DbCommand instance</returns> /// <exception cref="InvalidOperationException">QueryProvider 속성이 null일때</exception> public static DbCommand GetNamedQueryCommand(this IAdoRepository repository, string queryKey, params IAdoParameter[] parameters) { var query = repository.QueryProvider.GetQuery(queryKey); Guard.Assert(query.IsNotWhiteSpace(), "QueryKey=[{0}] 에 해당하는 쿼리 문을 찾지 못했습니다.", queryKey); return((AdoTool.IsSqlString(query)) ? repository.GetSqlStringCommand(query, parameters) : repository.GetProcedureCommand(query, AdoTool.DEFAULT_DISCOVER_PARAMETER, parameters)); }
/// <summary> /// 지정된 쿼리 문을 실행한 결과 셋의 레코드 갯수를 구한다. /// </summary> /// <param name="repository">IAdoRepository 인스턴스</param> /// <param name="query">실행할 Command 객체</param> /// <param name="parameters">Command 인자 정보</param> /// <returns>결과 셋의 레코드 수</returns> /// <remarks> /// 실제 SQL의 count(*) 함수를 생성하는 것이 아니라, IDataReader를 이용하여 결과 셋을 가져와서 갯수만 센다. /// 장점은 DataSet을 이용하여 Paging하는 것보다 빠르고, Count 용 Query문을 따로 만들 필요가 없다. /// 단점은 SQL의 count(*) 함수보다는 당연히 느리다. /// </remarks> public static int Count(this IAdoRepository repository, string query, params IAdoParameter[] parameters) { query.ShouldNotBeWhiteSpace("query"); if (AdoTool.IsSqlString(query)) { return(repository.CountBySqlString(query, parameters)); } using (var cmd = repository.GetCommand(query)) return(repository.Count(cmd, parameters)); }
/// <summary> /// <paramref name="query"/>를 Paging 정보에 근거해서 실행하고, 결과를 DataTable로 반환한다. /// NOTE: DISTINCT, TOP N 조회는 Paging에서 지원하지 않습니다. /// </summary> /// <param name="query">조회용 쿼리 문</param> /// <param name="pageIndex">Page Index (0부터 시작). null이면 0으로 간주</param> /// <param name="pageSize">Page Size. 한 페이지에 표현할 요소 수 (보통 10개). null이면 10으로 간주</param> /// <param name="parameters">조회용 쿼리의 Parameter 정보</param> /// <returns>Paging된 DataTable</returns> public PagingDataTable ExecutePagingDataTable(string query, int?pageIndex, int?pageSize, params IAdoParameter[] parameters) { query.ShouldNotBeWhiteSpace("query"); if (AdoTool.IsSqlString(query)) { return(ExecutePagingDataTableBySqlString(query, pageIndex, pageSize, parameters)); } using (var cmd = this.GetCommand(query)) return(ExecutePagingDataTable(cmd, pageIndex, pageSize, parameters)); }
/// <summary> /// 지정된 쿼리문을 CommendText로 가지는 <see cref="DbCommand"/> 인스턴스를 생성합니다. /// </summary> /// <param name="repository">IAdoRepository 인스턴스</param> /// <param name="query">simple query string or procedure name or queryKey of QueryProvider ([Section,] QueryName)</param> /// <param name="discoverParams">discover parameters</param> /// <returns>instance of <see cref="DbCommand"/></returns> public static DbCommand GetCommand(this IAdoRepository repository, string query, bool discoverParams) { query.ShouldNotBeWhiteSpace("query"); if (repository.QueryProvider != null && query.Contains(InIQueryProviderBase.SECTION_DELIMITER) && AdoTool.IsSqlString(query) == false) { string namedQuery; if (repository.QueryProvider.TryGetQuery(query, out namedQuery)) { query = namedQuery; } } return((AdoTool.IsSqlString(query)) ? repository.GetSqlStringCommand(query) : repository.GetProcedureCommand(query, discoverParams)); }