- 爱易网页
- 
                            C#教程
- C#调用ORACLE包中的存储过程报错,该如何解决 
日期:2014-05-18  浏览次数:21098 次 
                    
                        
                         C#调用ORACLE包中的存储过程报错
过程定议:
    PROCEDURE P_LOGI(iv_userid IN VARCHAR,iv_password IN VARCHAR,
                     ov_username OUT VARCHAR,ov_role OUT VARCHAR)
   IS
     r_zy JC_ZHIYDOC%ROWTYPE;
   BEGIN
     BEGIN
       SELECT * INTO r_zy
         FROM JC_ZHIYDOC
        WHERE ZHIY_NO=Upper(iv_userid);
     EXCEPTION WHEN OTHERS THEN
       PRC_UTL_RAISE(-20011,'WXW.P_LOGI','HDL001','@USER='||iv_userid||';');
     END;
     IF r_zy.PWD IS NULL THEN
       PRC_UTL_RAISE(-20011,'WXW.P_LOGI','HDL003','');
     END IF;
  /*  \* IF Upper(iv_password)<>F_DECRYPT_DATA(r_zy.PWD) THEN
       PRC_UTL_RAISE(-20011,'PKG_UTL_LOGIN.P_LOGIN','HDL002','');*\
     END IF;*/
     ov_username := r_zy.ZHIY_NAME;
     ov_role     := r_zy.JIAOS_ID;
   END P_LOGI;
C#前台调用:
  private void button1_Click(object sender, EventArgs e)
         {
             //声明变量
             string iv_userid = "";
             string iv_password = "";
             string ov_username = "";
             string ov_role = "";
             OracleConnection ORCNET = new OracleConnection("data source=lmis6;user id=Lmis;password=lmis6xj");
             OracleCommand cmd = new OracleCommand("WXW.P_LOGI", ORCNET);
             cmd.CommandType = CommandType.StoredProcedure;
             OracleParameter[] parm = new OracleParameter[4];
             //in
             parm[0] = new OracleParameter(@iv_userid, OracleType.VarChar, 10);
             parm[1] = new OracleParameter(@iv_password, OracleType.VarChar, 32);
             //out
             parm[2] = new OracleParameter(@ov_username, OracleType.VarChar, 50);
             parm[3] = new OracleParameter(@ov_role, OracleType.VarChar, 50);
             //设置参数输入输出类型
             parm[0].Direction=ParameterDirection.Input;
             parm[1].Direction=ParameterDirection.Input;
             parm[2].Direction=ParameterDirection.Output;
             parm[3].Direction=ParameterDirection.Output;
             //设置参数值类型
             parm[0].DbType = DbType.String;
             parm[1].DbType = DbType.String;
             parm[2].DbType = DbType.String;
             parm[3].DbType = DbType.String;
             //给参数赋值
             parm[0].Value = name.Text;
             parm[1].Value = pwd.Text;
             parm[2].Value = null;
             parm[3].Value = null;
             if (name.Text.Trim() == "" || pwd.Text.Trim() == "")
             {
                 MessageBox.Show("用户名或密码不能为空!");
             }
             cmd.Parameters.Add(parm[0]);
             cmd.Parameters.Add(parm[1]);
             cmd.Parameters.Add(parm[2]);
             cmd.Parameters.Add(parm[3]);
             try
             {
                 ORCNET.Open();
                 cmd.ExecuteNonQuery();
                         MessageBox.Show("成功连接ORACLE数据库");
                 //ORCNET.Close();
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
             finally
             {  
             }
         }
------解决方案--------------------
注意对应参数的类型。