运行相同的查询导致第二次错误
我有一个数据表,其中包含所有必需的字段,这是选择查询所需的。现在我正在从数据表的第一行读取数据并运行选择查询(如下所示)。它第一次工作正常。 现在我正在采取第二行,并给予所有必填字段(如我为第一行),并运行选择查询它给错误“权限不足”。当我在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();
}
}
给出您需要打开并在每次查询执行后关闭连接。
并且在关闭连接之后还会返回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
检查编辑一次。 –
试试上面的代码,让我知道,如果这样的作品。 –
您需要关闭数据库连接,并发射了你的第二个查询之前再次打开它。
类似:
SqlConnection.Open();
而且
SqlConnection.Close();
是的,我在那个功能上做了同样的事情,仍然没有工作 –
你需要确保你关闭两个Connection
和DataReader
对象。
尝试使用ExecuteReader
中的CommandBehavior
参数,因为它将在您关闭DataReader
后返回close the connection automatically。
cmd.ExecuteReader(CommandBehavior.CloseConnection)
仍然是一样的错误。 :(不工作@CaptainMarvel –
重构为编写查询中使用参数化查询,环绕一个'使用(){}'结构,你的连接对象,那么你就不会需要调用'close()方法'函数的Oracle对象,以及 – MethodMan