C# 将XML从Oracle过程返回到C restful服务
我试图构建一个C restful服务,它调用Oracle过程并返回XML结果。我已经在SQLDeveloper中成功地测试了这个过程,并且可以连接到数据库。我收到oracle错误ORA-01013:用户在运行服务时请求取消当前操作。调用ExecuteReader时会发生错误 .Net版本2010 Oracle 11.2版 完全错误C# 将XML从Oracle过程返回到C restful服务,c#,xml,oracle,rest,stored-procedures,C#,Xml,Oracle,Rest,Stored Procedures,我试图构建一个C restful服务,它调用Oracle过程并返回XML结果。我已经在SQLDeveloper中成功地测试了这个过程,并且可以连接到数据库。我收到oracle错误ORA-01013:用户在运行服务时请求取消当前操作。调用ExecuteReader时会发生错误 .Net版本2010 Oracle 11.2版 完全错误 Oracle.ManagedDataAccess.Client.OracleException was caught Message=ORA-01013: use
Oracle.ManagedDataAccess.Client.OracleException was caught
Message=ORA-01013: user requested cancel of current operation
Source=Oracle Data Provider for .NET, Managed Driver
ErrorCode=1013
DataSource=""
Number=1013
Procedure=""
StackTrace:
at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int32 lobPrefetchSize, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Boolean isDescribeOnly, Boolean isFromEF)
at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader()
at WcfDailyDataImporterRestService.DailyDataImporterRestService.GetIndividualFund(String FundNumber) in C:\Working\Source Code\WcfDailyDataImporterRestService\WcfDailyDataImporterRestService\DailyDataImporterRestService.cs:line 39
InnerException:
程序
create or replace
PROCEDURE SP_GETINDIVIDUALFUND(v_fundID IN VARCHAR2,
v_ResultSet OUT sp_GetResultSet.ResultSet) AS
BEGIN
Open v_ResultSet FOR
SELECT XMLELEMENT("ROOT",
XMLAGG(XMLELEMENT("ROW",
XMLELEMENT("FUNDNAME", A.FUNDNAME),
XMLELEMENT("FUNDNUMBER", substr(A.FundStationFundNumber, 1, 4)),
XMLELEMENT("SHARECLASS", A.SHARECLASS),
XMLELEMENT("ASOFDATE", B.ASOFDATE),
XMLELEMENT("NAV", B.NAV),
XMLELEMENT("NAVCHANGE", B.NAVCHANGE),
XMLELEMENT("INCEPTIONDATE", A.INCEPTIONDATE)
)
)
)
FROM TBL_FUND A,
TBL_FUNDDAILYINFO B
WHERE A.FUNDID = B.FUNDID (+)
AND substr(A.FundStationFundNumber, 1, 4) = v_fundID
AND A.PRODUCTLINECODE = '3'
AND (A.PRODUCTCATEGORYCODE <> '5'
AND A.PRODUCTCATEGORYCODE <> '6'
AND A.PRODUCTCATEGORYCODE <> '102')
ORDER BY A.FUNDNAME,
A.SHARECLASS;
END;
我尝试过的事情
在过程中返回XmlType而不是游标
仅返回cmd.ExecuteNonQuery;同样的错误
添加cmd.CommandTimeout=5000;同样的错误
重新编译代码和过程。
谢谢您的帮助或建议。明白了。我不得不改变我的程序如下
create or replace
PROCEDURE SP_GETINDIVIDUALFUND(v_fundID IN VARCHAR2,
v_ResultSet OUT sp_GetResultSet.ResultSet) AS
BEGIN
Open v_ResultSet FOR
SELECT dbms_xmlgen.getxml('select A.FUNDNAME,
substr(A.FundStationFundNumber, 1, 4) AS FundStationFundNumber,
A.SHARECLASS,
B.ASOFDATE,
B.NAV,
B.NAVCHANGE,
A.INCEPTIONDATE
FROM TBL_FUND A,
TBL_FUNDDAILYINFO B
WHERE A.FUNDID = B.FUNDID (+)
AND A.PRODUCTLINECODE = 3
AND (A.PRODUCTCATEGORYCODE <> 5
AND A.PRODUCTCATEGORYCODE <> 6
AND A.PRODUCTCATEGORYCODE <> 102)
ORDER BY A.FUNDNAME,
A.SHARECLASS')
xml FROM dual;
END;
create or replace
PROCEDURE SP_GETINDIVIDUALFUND(v_fundID IN VARCHAR2,
v_ResultSet OUT sp_GetResultSet.ResultSet) AS
BEGIN
Open v_ResultSet FOR
SELECT dbms_xmlgen.getxml('select A.FUNDNAME,
substr(A.FundStationFundNumber, 1, 4) AS FundStationFundNumber,
A.SHARECLASS,
B.ASOFDATE,
B.NAV,
B.NAVCHANGE,
A.INCEPTIONDATE
FROM TBL_FUND A,
TBL_FUNDDAILYINFO B
WHERE A.FUNDID = B.FUNDID (+)
AND A.PRODUCTLINECODE = 3
AND (A.PRODUCTCATEGORYCODE <> 5
AND A.PRODUCTCATEGORYCODE <> 6
AND A.PRODUCTCATEGORYCODE <> 102)
ORDER BY A.FUNDNAME,
A.SHARECLASS')
xml FROM dual;
END;