C# Oracle输出参数返回null

C# Oracle输出参数返回null,c#,sql,oracle-sqldeveloper,C#,Sql,Oracle Sqldeveloper,我正在尝试从数据库中获取输出值。当我在数据库端调试时,它似乎正在打印正确的值。但当我从C#端获取相同的数据时,得到的是空值 CREATE OR REPLACE PROCEDURE GetAssetInfoSelect (inTransactionID in varchar2, varProcessorAction out varchar2, varTransactionStatus out varchar2) is begin if (inTransactionID is not null)

我正在尝试从数据库中获取输出值。当我在数据库端调试时,它似乎正在打印正确的值。但当我从C#端获取相同的数据时,得到的是空值

CREATE OR REPLACE PROCEDURE GetAssetInfoSelect
(inTransactionID in varchar2,
varProcessorAction out varchar2,
varTransactionStatus out varchar2)
is

begin
 if (inTransactionID is not null) then
  select ProcessorAction, TransactionStatus into varProcessorAction, varTransactionStatus
    from tblAssetIDTransactions
    where TransactionID = inTransactionID;

end if;

END GetAssetInfoSelect;

Debug.WriteLine
输出空值


我做错了什么

尝试关闭连接
conn.Close()
Debug.WriteLine
完成后。

您的cmd.ExecuteNonQuery不正确您正在执行
Select
而不是
更新或插入
查找如何使用以下
SqlDataReader reader=cmd.ExecuteReader()
调试
代码并重新评估您的逻辑以及这是什么
strTransactionID
@DJKRAZE编辑Q以显示完整代码
strTransactionID
只是我正在使用的一个字符串。您还应该去掉try/catch块。此外,您的
OracleConnection
oraclecondromd
应该位于
using
块中:`using(OracleConnection conn=new OracleConnection(connstring)){using(oraclecondromd=new oraclecondromd()){cmd Connection=conn;conn.Open();…return true/false}应该将代码包装在
using(OracleConnection conn=new OracleConnection(consting))
以及
using(oraclecondm cmd=new oraclecondm())
中,这样代码会自动释放,无需显式调用连接。关闭
private static bool GetAssetInfoSelect(string strTransactionID)
{
        try
        {
            OracleConnection conn = new OracleConnection(connstring);
            OracleCommand cmd = new OracleCommand();

            cmd.Connection = conn;
            conn.Open();
            cmd.CommandText = "GetAssetInfoSelect";
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new OracleParameter("inTransactionID", OracleType.Char)).Value = strTransactionID;
            cmd.Parameters.Add(new OracleParameter("varProcessorAction", OracleType.Char,200)).Direction = ParameterDirection.Output;
            cmd.Parameters.Add(new OracleParameter("varTransactionStatus", OracleType.Char,200)).Direction = ParameterDirection.Output;
            cmd.ExecuteNonQuery();

            Debug.WriteLine(cmd.Parameters["varProcessorAction"].Value);
            Debug.WriteLine(cmd.Parameters["varTransactionStatus"].Value);
            //immitate if (inTransactionID is not null AND varProcessorAction = 'A' AND varTransactionStatus = 'A') then
            if (!string.IsNullOrEmpty(strTransactionID) && cmd.Parameters["varProcessorAction"].Equals('A') && cmd.Parameters["varTransactionStatus"].Equals('A'))
            {
                conn.Close();
                return true;
            }
            else
            {
                conn.Close();
                return false;
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }