使用c#调用oracle过程时为什么会出错?

时间:2015-07-01 06:30:04

标签: c# oracle stored-procedures

我将此程序写入oracle 11g:

create or replace
PROCEDURE LOG_IN(P_USERNAME IN VARCHAR2,
                 P_PASSWORD IN VARCHAR2,
                 P_LOGIN_RESULT OUT LOGINRESULT) IS
  LV_LOGIN_RESULT LOGINRESULT;
BEGIN
  LOG_WRITER_BILL(NULL, 'LOGIN', 'MODULE START', 'START');
  LV_LOGIN_RESULT := LOGINRESULT(NULL,
                                 NULL);
  LV_LOGIN_RESULT.SESSIONID := WEBSERVICE_API_PKG.LOGIN(P_USERNAME,
                                                        P_PASSWORD);
  IF LV_LOGIN_RESULT.SESSIONID IS NULL THEN
    LV_LOGIN_RESULT.RESULT:= 1;
  ELSE
    LV_LOGIN_RESULT.RESULT := 0;
  END IF;
  LOG_WRITER_BILL(NULL, 'LOGIN', 'MODULE END', 'END');
  P_LOGIN_RESULT := LV_LOGIN_RESULT;
END;


并进入这一行P_LOGIN_RESULT OUT LOGINRESULT我用这个声明对象:

create or replace
TYPE LOGINRESULT AS OBJECT 
( 
  Result NUMBER,
  SessionID NUMBER
);


然后我把这段代码写入c#中运行代码:

OracleConnection conn = new OracleConnection("User Id=WEBSERVICE_ACCESS;Password=DAMAVAND;Server=ORA11;");
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = "LOG_IN";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("P_USERNAME", "guest").Direction=ParameterDirection.Input;
            cmd.Parameters.Add("P_PASSWORD", "guest").Direction = ParameterDirection.Input; 

            cmd.Parameters.Add("Result", OracleType.Number, 20).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("SessionID", OracleType.Number, 20).Direction = ParameterDirection.Output;  
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine(cmd.Parameters["Result"].Value.ToString());
            cmd.Connection.Close();


但是当我运行该代码时,我得到了这个错误:
enter image description here
会发生什么?

1 个答案:

答案 0 :(得分:0)

在该过程中,只有一个输出参数P_LOGIN_RESULT。在C#中的调用中,您有两个参数ResultSessionId