/// <summary> /// Stored Procedure를 수행하고, OUTPUT, RETURN_VALUE를 반환한다. /// </summary> /// <param name="request">요청 항목</param> /// <param name="responseDocument">응답 정보</param> protected virtual void ExecuteProcedure(XdsRequestItem request, XdsResponseDocument responseDocument) { if (IsDebugEnabled) { log.Debug("프로시저를 실행합니다... requestId=[{0}], procedure=[{1}], requestType=[{2}], responseType=[{3}]", request.Id, request.Query, request.RequestKind, request.ResponseKind); } try { var maxSequence = Math.Max(1, request.Values.Count); for (var seqId = 0; seqId < maxSequence; seqId++) { var adoParameters = PrepareParameters(request, seqId).ToArray(); using (var cmd = Ado.GetProcedureCommand(request.Query)) { Ado.ExecuteNonQuery(cmd, adoParameters); var response = responseDocument.AddResponseItem(XmlDataResponseKind.Scalar, request.Id, seqId); ExtractParameters(AdoTool.GetOutputParameters(Ado.Db, cmd), response, seqId); } } } catch (Exception ex) { if (log.IsErrorEnabled) { log.ErrorException(string.Format("프로시저 실행에 실패했습니다. procedure=[{0}]", request.Query), ex); } throw; } if (IsDebugEnabled) { log.Debug("프로시저 실행에 성공했습니다. procedure=[{0}]", request.Query); } }
/// <summary> /// 일반 SQL Query 문 중에 DDL 과 관련된 문장을 수행한다. (결과 SET이 필요없는 것) /// </summary> /// <param name="request">요청 항목</param> /// <param name="responseDocument">응답 정보</param> protected virtual void ExecuteQuery(XdsRequestItem request, XdsResponseDocument responseDocument) { if (IsDebugEnabled) { log.Debug("쿼리문장을 실행합니다... requestId=[{0}], queryString=[{1}], requestType=[{2}], responseType=[{3}]", request.Id, request.Query, request.RequestKind, request.ResponseKind); } try { var isScalar = request.ResponseKind == XmlDataResponseKind.Scalar; var maxSequence = Math.Max(1, request.Values.Count); for (var seqId = 0; seqId < maxSequence; seqId++) { var adoParameters = PrepareParameters(request, seqId).ToArray(); using (var cmd = Ado.GetSqlStringCommand(request.Query)) { var result = (isScalar) ? Ado.ExecuteScalar(cmd, adoParameters) : Ado.ExecuteNonQuery(cmd, adoParameters); var responseItem = responseDocument.AddResponseItem(request.ResponseKind, request.Id, seqId); if (isScalar) { responseItem.Fields.AddField("RETURN_VALUE", typeof(int).Name, 4); responseItem.Records.AddColumnArray(result); } } } } catch (Exception ex) { if (log.IsErrorEnabled) { log.ErrorException(string.Format("쿼리 문 실행에 실패했습니다. query=[{0}]", request.Query), ex); } throw; } if (IsDebugEnabled) { log.Debug("쿼리문 실행에 성공했습니다. query=[{0}]", request.Query); } }