我有一个数据表,其中包含select查询所需的所有必填字段。现在我从数据表的第一行获取数据并运行一个select查询(如下所示)。这是第一次工作正常。 现在我正在进行第二行并给出所有必填字段(正如我为第一行所做的那样)并运行select查询,它给出错误“权限不足”。当我在Oracle SQL Developer中手动运行select查询(实际上是相同但具有不同参数)时,它的工作正常。
Query1: select cloumnname1 from table where columnname2='valueA' and columnname3= 'VALUEB'
Query2: select cloumnname1 from table where columnname2='valueA' and columnname3= 'VALUEB'
从数据库中获取数据
public OracleDataReader ExecuteReader(string SelectQuery, string conString)
{
try
{
OpenDbConnection(conString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText = SelectQuery;
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader ora_dataReader = cmd.ExecuteReader();
return ora_dataReader;
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
编辑: 忘了提到我在另一个函数中调用这个函数,如下所示
public DataTable GetDataFromDB(string SelectQuery, string conString)
{
try
{
DataTable dt = new DataTable();
dt.Load(ExecuteReader(SelectQuery,conString));
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
CloseDbConnection();
}
}
答案 0 :(得分:1)
您需要在每次执行查询后打开和关闭连接。
并在关闭连接后返回OracleDataReader,否则会导致内存泄漏。如果在关闭连接之前返回OracleDataReader,则会出现相同的错误。
尝试这样的事情:
public OracleDataReader ExecuteReader(string SelectQuery, string conString)
{
try
{
OpenDbConnection(conString);
OracleCommand cmd = new OracleCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = SelectQuery;
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader ora_dataReader = cmd.ExecuteReader();
}
catch (Exception ex)
{
Logging.LogMessage(Logging.LogLevel.Error, 0, "DAL", this.GetType().Name, ex.Message + " : " + ex.StackTrace);
throw ex;
}
finally
{
con.close();
con.Dispose();
}
return ora_dataReader;
}
此参考中的更多信息:https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledatareader(v=vs.110).aspx
答案 1 :(得分:1)
在启动第二个查询之前,您需要关闭数据库连接并再次打开它。
类似的东西:
SqlConnection.Open();
并且
SqlConnection.Close();
答案 2 :(得分:1)
您需要确保同时关闭Connection
和DataReader
个对象。
尝试使用CommandBehavior
中的ExecuteReader
参数,因为关闭DataReader
后会close the connection automatically。{/ p>
cmd.ExecuteReader(CommandBehavior.CloseConnection)