[英]How to bring XML output from Oracle Stored procedure in c#
我在将Oracle与C#结合使用时遇到问题。 我们正在从SQL转向Oracle,我们的软件供应商使用AX_Gate.Process方法向我们提供API,以通过PL / SQL匿名块返回交易风格:
declare
vMName varchar2(100);
vInput XMLtype;
vOutput XMLtype;
begin
vMName := 'Marketing Styles';
vInput := XMLtype('<Marketing_Styles-Read/>');
vOutput := AX_Gate.Process(vMethodName, vInput);
DBMS_OUTPUT.PUT_LINE(vOutput.getStringVal());
end;
为了在C#中使用此过程,我开发了能够发送信息但没有发回所需XML输出的代码。 C#代码如下:
try
{
//Oracle connection open
OracleConnection.Open();
//SQL script to invoke AX_Gate.Process
string SQLScript = "declare vMName varchar2(100); vInput XMLtype; vOutput XMLtype; "+
"begin vOutput := AX_Gate.Process(" + vMethodName + " , " + vInput + "); end;";
OracleCommand OraCommand = new OracleCommand(SQLScript);
OraCommand.Connection = OracleConnection;
OraCommand.CommandType = System.Data.CommandType.Text;
//OraCommand.Parameters.Add(new OracleParameter("vOutput", OracleDbType.XmlType, ParameterDirection.Output));
OraCommand.Parameters.Add(new OracleParameter("vOutput", OracleDbType.XmlType)).Direction = ParameterDirection.Output;
//OracleDataReader dr = new OracleDataReader();
OracleXmlType poXml;
OracleDataReader poReader = OraCommand.ExecuteReader();
var sqlDataAdapter = new OracleDataAdapter(OraCommand);
var dataTable = new DataTable("vOutput");
sqlDataAdapter.Fill(dataTable);
OracleConnection.Close();
如何使用上述Oracle流程/过程发送XML并以XML形式取回输出。
谢谢
string SQLScript = "declare vMName varchar2(100); vInput XMLtype; vOutput XMLtype; "+
"begin vOutput := AX_Gate.Process(" + vMethodName + " , " + vInput + "); end;";
...
OraCommand.Parameters.Add(new OracleParameter("vOutput", OracleDbType.XmlType)).Direction = ParameterDirection.Output;
在您的代码中,没有一个绑定参数,因此从未使用过OracleParameter
。 如果要在pl / sql代码中使用out参数,则不应在声明中声明它,而应使用冒号“:”-
String queryString =
@"declare
xml_ xmltype := xmltype('<root></root>');
begin
:par := xml_;
end;";
using (OracleConnection connection = new OracleConnection(source))
{
OracleCommand command = new OracleCommand(queryString, connection);
connection.Open();
var res = command.Parameters.Add("par", OracleDbType.XmlType, ParameterDirection.Output);
command.ExecuteNonQuery();
MessageBox.Show(((Oracle.DataAccess.Types.OracleXmlType)(res.Value)).Value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.