/// <summary> /// <see cref="ResourceName"/>에 해당하는 리소스 중에 <paramref name="localeKey"/>, <paramref name="resourceKey"/>에 /// 해당하는 리소스 정보를 조회하는 <see cref="DbCommand"/>를 생성합니다. /// </summary> /// <param name="localeKey">지역화 정보( <see cref="CultureInfo.Name"/>)</param> /// <param name="resourceKey">Resource Key to retrive</param> private DbCommand GetResourceCommand(string localeKey, string resourceKey) { var sql = string.Format(GetResourceSql, TableName); return(Ado.GetSqlStringCommand(sql, AssemblyNameParameter, ResourceNameParameter, new AdoParameter("LocaleKey", localeKey), new AdoParameter("ResourceKey", resourceKey))); }
/// <summary> /// 지정된 쿼리 문을 실행한 결과 셋의 레코드 갯수를 구한다. (SQL 문장이 SQL Count() 함수 문장으로 변환이 가능하다면 속도가 가장 빠르다.) /// </summary> /// <param name="repository">IAdoRepository 인스턴스</param> /// <param name="sqlString">실행할 Command 객체</param> /// <param name="parameters">Command 인자 정보</param> /// <returns>결과 셋의 레코드 수</returns> /// <remarks> /// 실제 SQL의 count(*) 함수로 변환할 수 있는 SQL문장이라면, 변환하여 Count 값을 가져오고, /// 불가능하다면 IDataReader를 이용하여 결과 셋을 가져와서 갯수만 센다. /// </remarks> /// <seealso cref="AdoTool.GetCountingSqlString"/> public static int CountBySqlString(this IAdoRepository repository, string sqlString, params IAdoParameter[] parameters) { sqlString.ShouldNotBeWhiteSpace("sqlString"); // 1. SELECT Count(*) FROM 구문으로 변환이 가능하다면, 변환된 SQL 문장을 수행한다. try { var countSql = AdoTool.GetCountingSqlString(sqlString); var count = repository.ExecuteScalarBySqlString(countSql, parameters).AsInt(-1); if (count > -1) { return(count); } } catch (Exception ex) { if (log.IsInfoEnabled) { log.Info("Count() SQL로 변환 작업이 지원되지 않는 문장입니다. DataReader를 이용하여, 결과 셋의 레코드 수를 알아봅니다."); log.Info("sqlString=[{0}]", sqlString); log.Info(ex); } } // 2. SQL Count() 함수를 이용하지 못할 경우라면, 그냥 DataReader를 이용하여 Count를 계산한다. // using (var cmd = repository.GetSqlStringCommand(sqlString)) return(repository.Count(cmd, parameters)); }
/// <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> /// 지정된 쿼리문을 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)); }