定义了一个类库, 一个登陆界面  但是在执行cmd.ExecuteNonQuery();时 显示“在Oracle.DataAccess.Client.OracleException 中第一次偶然出现的“Oracle.DataAccess.dll”类型的异常”,存储过程名为P_LOG   在sqlplus下可以执行。求大神指教类库:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;namespace log_in_procedure
{
    public class DataAccess
    {
        private string connStr = @"Data Source=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )" +
 "(CONNECT_DATA=(SID=orcl)));User Id=system;Password=740104;";
        private OracleConnection conn = null;        public DataAccess()
        {
        }        public DataAccess(string strConnection)
        {
            this.connStr = strConnection;
        }        public OracleConnection getConnection()
        {
            try
            {                if (conn == null)
                    conn = new OracleConnection(connStr);
                if (conn.State == ConnectionState.Open)
                    conn.Open();
                return conn;
            }
            catch (OracleException e)
            {
                throw e;
            }
        }        public void closeConnection()
        {
            if (conn.State == ConnectionState.Open)
                conn.Close();
        }        //执行存储过程        public void RunProcedure(string storedProcName, OracleParameter[] parameters)
        {
            OracleCommand cmd = new OracleCommand(storedProcName, getConnection());
            cmd.CommandType = CommandType.StoredProcedure;
            foreach (OracleParameter parameter in parameters)
            {
                cmd.Parameters.Add(parameter);
            }
            if (conn.State == ConnectionState.Closed)
                conn.Open();
            cmd.ExecuteNonQuery();//执行存储过程
            closeConnection();
        }        //执行登录验证(在实际应用中应该把这种执行业务逻辑的代码与数据操作基础代码分离,以        //实现软件的清晰分层、增强代码的可复用性)        public bool Login(string username, string password)
        {
            OracleParameter[] parameters ={
                     new OracleParameter("v_Name",OracleDbType.Varchar2),
                     new OracleParameter("v_Password",OracleDbType.Varchar2),
                     new OracleParameter("b_Passed",OracleDbType.Char)
               };
            parameters[0].Value = username;
            parameters[1].Value = password;
            parameters[0].Direction = ParameterDirection.Input;
            parameters[1].Direction = ParameterDirection.Input;
            parameters[2].Direction = ParameterDirection.Output;
            try
            {
                RunProcedure("P_LOG", parameters);
                if (parameters[2].Value.ToString() == "1")
                    return true;
                else
                    return false;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
}登陆界面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;namespace log_in_procedure
{
    public class DataAccess
    {
        private string connStr = @"Data Source=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )" +
 "(CONNECT_DATA=(SID=orcl)));User Id=system;Password=740104;";
        private OracleConnection conn = null;        public DataAccess()
        {
        }        public DataAccess(string strConnection)
        {
            this.connStr = strConnection;
        }        public OracleConnection getConnection()
        {
            try
            {                if (conn == null)
                    conn = new OracleConnection(connStr);
                if (conn.State == ConnectionState.Open)
                    conn.Open();
                return conn;
            }
            catch (OracleException e)
            {
                throw e;
            }
        }        public void closeConnection()
        {
            if (conn.State == ConnectionState.Open)
                conn.Close();
        }        //执行存储过程        public void RunProcedure(string storedProcName, OracleParameter[] parameters)
        {
            OracleCommand cmd = new OracleCommand(storedProcName, getConnection());
            cmd.CommandType = CommandType.StoredProcedure;
            foreach (OracleParameter parameter in parameters)
            {
                cmd.Parameters.Add(parameter);
            }
            if (conn.State == ConnectionState.Closed)
                conn.Open();
            cmd.ExecuteNonQuery();//执行存储过程
            closeConnection();
        }        //执行登录验证(在实际应用中应该把这种执行业务逻辑的代码与数据操作基础代码分离,以        //实现软件的清晰分层、增强代码的可复用性)        public bool Login(string username, string password)
        {
            OracleParameter[] parameters ={
                     new OracleParameter("v_Name",OracleDbType.Varchar2),
                     new OracleParameter("v_Password",OracleDbType.Varchar2),
                     new OracleParameter("b_Passed",OracleDbType.Char)
               };
            parameters[0].Value = username;
            parameters[1].Value = password;
            parameters[0].Direction = ParameterDirection.Input;
            parameters[1].Direction = ParameterDirection.Input;
            parameters[2].Direction = ParameterDirection.Output;
            try
            {
                RunProcedure("P_LOG", parameters);
                if (parameters[2].Value.ToString() == "1")
                    return true;
                else
                    return false;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
}

解决方案 »

  1.   

    访问的表或试图不存在。
    访问的表的确不存在。
    访问的表不是当前登录用户创建的。
    在想访问的表或视图前,加上要访问的表的所属用户名称(如:username.test_tab访问的是username用户的test_tab表)
      

  2.   

    我在 存储过程中 加上了 表的 所属用户名 还是不行
          (v_Name varchar2,v_Password varchar2,b_Passed out char)      
     as  n_Count number;      
    begin      
      select count(*) into n_Count from system.identity_permissions where student_id=v_Name and password=v_Password;      
            if n_Count > 0 then      
               b_Passed:='1';      
            else      
               b_Passed:='0';      
            end if;      
          end;