执行存储过程odp.net时出现异常

时间:2014-11-20 05:18:39

标签: asp.net-mvc-4 stored-procedures odp.net

我使用以下代码执行了大约5个存储过程(参数将根据存储过程而有所不同)。除了下面的SP,这些工作正常。 以下代码的输出是: p_out = 2 p_msg ='执行时异常'

在SP中,它将进入异常块。任何人都可以告诉我确切的问题。

代码:

  Database db = DatabaseFactory.CreateDatabase("OracleDBConnectionString");       
   OracleCommand oracleCommand = new OracleCommand();       
   oracleCommand.CommandType = CommandType.StoredProcedure;       
   oracleCommand.CommandText = "PCK_ADMIN.PROC_VALIDATE_USER";       
   oracleCommand.Parameters.Add("P_USERNAME", OracleDbType.Varchar2).Value = "ddd";         
   oracleCommand.Parameters.Add("P_out", OracleDbType.Int32).Direction =   ParameterDirection.Output;      
   oracleCommand.Parameters.Add("P_msg", OracleDbType.Varchar2).Direction = ParameterDirection.Output;

db.ExecuteNonQuery(oracleCommand);
string outValue = oracleCommand.Parameters["P_out"].Value.ToString();
string outMsg = oracleCommand.Parameters["P_msg"].Value.ToString();

存储过程是:

create or replace
PACKAGE BODY PCK_ADMIN AS

PROCEDURE PROC_VALIDATE_USER
                          (P_USERNAME IN USR_USER.USERNAME%TYPE,
                           P_out  OUT NUMBER,
                           P_msg  OUT VARCHAR2) AS

 v_cnt      NUMBER(5):=0;

BEGIN

P_OUT := 0;

Select count(USERID) into v_cnt from usr_user
where username = P_USERNAME;

IF v_cnt = 0 then
  p_out := 0;
  p_msg := 'Record doesnot exists';
ELSE
  p_out := 1;
  p_msg := 'Record already exists';
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
 p_out := 2;
 p_msg := 'exception while execution';
 END PROC_VALIDATE_USER;
 END PCK_ADMIN;

usr_user的表结构是

 USERNAME   VARCHAR2(20 BYTE)
 USERID     NUMBER

1 个答案:

答案 0 :(得分:1)

我为P_msg输出参数指定了大小并且它有效。

oracleCommand.Parameters.Add("P_msg", OracleDbType.Varchar2, 50).Direction = ParameterDirection.Output;