2013-03-08 33 views
0

这里是我的存储过程(制作简单,试图找出问题,因此,所有我现在做的是设置OUT参数,):无法检索出从Oracle存储过程PARAMS在C#

程序DequeuePPLPlatformMsg ( MSGTYPE OUT VARCHAR2, msgBody OUT VARCHAR2) IS BEGIN

msgType := 'TESTTYPE'; 
    msgBody := 'TESTBODY'; 

END DequeuePPLPlatformMsg; 

这里是我的C#代码来调用存储过程,并试图获得在OUT参数,值:

  OConn = new OracleConnection(); 
      OConn.ConnectionString = "Password=mypw; User ID=myid; Data Source=devdb;"; 
      OConn.Open(); 
      OComm = new OracleCommand(StoredProc, OConn); 
      OComm.CommandType = System.Data.CommandType.StoredProcedure; 

     OComm.Parameters.Add("msgType", OracleDbType.Varchar2, 255, System.Data.ParameterDirection.Output); 
     OComm.Parameters.Add("msgBody", OracleDbType.Varchar2, 255, System.Data.ParameterDirection.Output); 

       int Result = OComm.ExecuteNonQuery(); 

       OConn.Close(); 

       String msgType = OComm.Parameters["msgType"].Value.ToString(); 
       String msgBody = OComm.Parameters["msgBody"].Value.ToString(); 

当我查看参数中的值时,它们包含空字符串。

任何想法?谢谢!!

回答

1

对不起,这里是详细信息...

这是该存储过程:

程序DequeuePPLPlatformMsg(MSGTYPE OUT VARCHAR2,msgBody OUT VARCHAR2)方面开始

msgType := 'TESTTYPE'; 
msgBody := 'TESTBODY'; 

END DequeuePPLPlatformMsg;

这是C#代码:

 OConn = new OracleConnection(); 
     OConn.ConnectionString = "Password=mypw; User ID=myid; Data Source=devdb;"; 
     OConn.Open(); 
     OComm = new OracleCommand(StoredProc, OConn); 
     OComm.CommandType = System.Data.CommandType.StoredProcedure; 

     OracleParameter msgTypeParam = new OracleParameter("msgType", OracleDbType.Varchar2); 
     msgTypeParam.Direction = System.Data.ParameterDirection.Output; 
     msgTypeParam.Value = ""; 
     msgTypeParam.Size = 255; 
     OComm.Parameters.Add(msgTypeParam); 

     OracleParameter msgBodyParam = new OracleParameter("msgBody", OracleDbType.XmlType); 
     msgBodyParam.Direction = System.Data.ParameterDirection.Output; 
     OComm.Parameters.Add(msgBodyParam); 


      int Result = OComm.ExecuteNonQuery(); 

      OConn.Close(); 

      String msgType = msgTypeParam.Value.ToString(); 

MSGTYPE是的String.Empty

谢谢!

+0

这是一个新问题? – McArthey 2013-06-28 16:15:58

0

您是否尝试过按价值访问它?

Dim retValParam As New OracleClient.OracleParameter("p_retVal", OracleClient.OracleType.VarChar) 

retValParam.Direction = ParameterDirection.Output 
retValParam.Size = 100 
retValParam.Value = "" 
command.Parameters.Add(retValParam) 

command.ExecuteNonQuery() 
retVal = retValParam.Value 
+0

McArthey你是最棒的!谢谢!!! – 2013-03-08 15:59:34

+0

很高兴帮助。这就是我们在这里。哦,那个,还有upvotes。 ;)如果您发现它有用,请继续并将其标记为此。谢谢,欢迎来到StackOverflow! – McArthey 2013-03-09 02:59:06

+0

这已经神秘地停止了工作,我回到了我开始的地方... – 2013-06-27 18:12:13