Esempio n. 1
0
        /// <summary>
        /// 요청 쿼리 문을 수행하여, <see cref="ResultSet"/> 으로 빌드하여, 응답 결과를 적용합니다.
        /// </summary>
        protected virtual void OpenQuery(RequestItem requestItem, ResponseItem responseItem, IAdoParameter[] adoParameters) {
            if(IsDebugEnabled)
                log.Debug("쿼리문을 수행하여 결과셋을 설정합니다...");

            using(var cmd = AdoRepository.GetCommand(requestItem.Query)) {
                var reader = AdoRepository.ExecuteReader(cmd, adoParameters);
                var resultSet = reader.CreateResultSet(NameMapper,
                                                       requestItem.FirstResult.GetValueOrDefault(),
                                                       requestItem.MaxResults.GetValueOrDefault(int.MaxValue));

                responseItem.ResultSet = resultSet;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 요청 쿼리 문을 수행하는데, 
        /// <see cref="IAdoRepository.ExecuteNonQuery(string,IAdoParameter[])" /> 나 
        /// <see cref="IAdoRepository.ExecuteScalar(string,IAdoParameter[])"/> 를 실행합니다.
        /// </summary>
        /// <param name="requestItem"></param>
        /// <param name="responseItem"></param>
        /// <param name="adoParameters"></param>
        protected virtual void ExecuteQuery(RequestItem requestItem, ResponseItem responseItem, IAdoParameter[] adoParameters) {
            // Scalar 값 구하기
            if(requestItem.ResponseFormat == ResponseFormatKind.Scalar) {
                if(IsDebugEnabled)
                    log.Debug("ExecuteNonScalar 를 수행하여, ResultValue 값을 설정합니다...");

                responseItem.ResultValue = AdoRepository.ExecuteScalar(requestItem.Query, adoParameters);
                return;
            }

            // 쿼리문이라면, 실행
            var query = requestItem.Query;
            if(AdoTool.IsSqlString(query)) {
                if(IsDebugEnabled)
                    log.Debug("ExecuteNonQuery 를 수행하고, 영향받은 행의 수를 ResultValue에 설정합니다...");

                responseItem.ResultValue = AdoRepository.ExecuteNonQuery(requestItem.Query, adoParameters);
                return;
            }


            if(IsDebugEnabled)
                log.Debug("ExecuteProcedure를 수행하고, Parameter 정보들을 ResultSet에 설정합니다.");

            //  Procedure 라면, Output Parameter 등을 ResultSet으로 반환함.
            //! 단 Procedure가 ResultSet을 반환해야 하는 경우는 OpenQuery를 수행할 수 있도록 ResponseFormat 을 ResponseFormatKind.ResultSet 으로 할 것
            //
            var parameters = AdoRepository.ExecuteProcedure(query, adoParameters);

            if(parameters != null) {
                responseItem.ResultValue = parameters.GetReturnValue();

                var row = new ResultRow(parameters.ToDictionary(p => p.Name, p => p.Value));
                responseItem.ResultSet.Add(row);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Stored Procudure 실행 후 OUTPUT, RETURN_VALUE 값을 응답개체(XdsResponseItem)에 추가한다.
        /// </summary>
        /// <param name="outputs">Command Parameter 중에 INPUT이 아닌 Parameter 들</param>
        /// <param name="response">Instance of XdsResponseItem to build with result of execution of DbCommand
        /// <param name="responseIndex">index of response</param>
        protected static void ExtractParameters(IAdoParameter[] outputs, XdsResponseItem response, int responseIndex) {
            if(outputs == null || outputs.Length == 0)
                return;

            foreach(var output in outputs) {
                response.Fields.Add(new XdsField(output.Name.RemoveParameterPrefix(),
                                                 DbFunc.GetLanguageType(output.ValueType).FullName,
                                                 output.Size.GetValueOrDefault(0)));
            }

            var record = new XdsRecord();

            foreach(var output in outputs)
                record.Columns.AddColumn(output.Value);

            response.Records.Add(record);
        }