/// <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; } }
/// <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); } }
/// <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); }