Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Stored Procedure를 실행하고, Parameter의 Direction이 INPUT이 아닌 Parameter들을 반환한다. (InputOutput, Output, ReturnValue)
        /// </summary>
        /// <param name="repository">IAdoRepository 인스턴스</param>
        /// <param name="spName">실행할 Procedure 이름</param>
        /// <param name="parameters">인자</param>
        /// <returns>INPUT을 제외한 Oupput, InputOutput, ReturnValue에 해당하는 Parameter 값을 반환한다.</returns>
        public static IAdoParameter[] ExecuteProcedure(this IAdoRepository repository, string spName, params IAdoParameter[] parameters)
        {
            if (IsDebugEnabled)
            {
                log.Debug("Procedure를 수행합니다... spName=[{0}], parameters=[{1}]", spName, parameters.CollectionToString());
            }

            using (var cmd = repository.GetProcedureCommand(spName)) {
                repository.ExecuteCommand(cmd, parameters);
                var result = AdoTool.GetOutputParameters(repository.Db, cmd);

                if (IsDebugEnabled)
                {
                    log.Debug("Procedure 수행 후 결과 값입니다. spName=[{0}], output parameters=[{1}]", spName, result.CollectionToString());
                }

                return(result);
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// 지정된 Procedure를 수행한다. 인자로 entity의 속성값을 이용한다.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="repository">IAdoRepository 인스턴스</param>
 /// <param name="spName">실행할 Procedure Name</param>
 /// <param name="entity">실행할 Entity</param>
 /// <param name="nameMapper">Name Mapping Class</param>
 /// <returns>Command 인자 중에 ParameterDirection이 ReturnValue인 인자의 값</returns>
 public static object ExecuteEntity <T>(this IAdoRepository repository, string spName, T entity, INameMapper nameMapper)
 {
     using (var cmd = repository.GetProcedureCommand(spName, true))
         return(repository.ExecuteEntity(cmd, entity, nameMapper));
 }
Exemplo n.º 5
0
 /// <summary>
 /// 지정한 Procedure의 실행 결과 셋이 존재하는지 검사한다 (결과 셋의 레코드가 하나 이상이다)
 /// </summary>
 public static bool ExistsByProcedure(this IAdoRepository repository, string spName, params IAdoParameter[] parameters)
 {
     using (var cmd = repository.GetProcedureCommand(spName, true))
         return(repository.Exists(cmd, parameters));
 }