定义了一个类库, 一个登陆界面 但是在执行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;
}
}
}
}
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;
}
}
}
}
访问的表的确不存在。
访问的表不是当前登录用户创建的。
在想访问的表或视图前,加上要访问的表的所属用户名称(如:username.test_tab访问的是username用户的test_tab表)
(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;