C# Oracle输出参数返回null
我正在尝试从数据库中获取输出值。当我在数据库端调试时,它似乎正在打印正确的值。但当我从C#端获取相同的数据时,得到的是空值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)
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);
}
}