我将此程序写入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();
但是当我运行该代码时,我得到了这个错误:
会发生什么?
答案 0 :(得分:0)
在该过程中,只有一个输出参数P_LOGIN_RESULT
。在C#中的调用中,您有两个参数Result
和SessionId
。