2017-06-05 81 views
1

我有一个数据表,其中包含所有必需的字段,这是选择查询所需的。现在我正在从数据表的第一行读取数据并运行选择查询(如下所示)。它第一次工作正常。 现在我正在采取第二行,并给予所有必填字段(如我为第一行),并运行选择查询它给错误“权限不足”。当我在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

重构为编写查询中使用参数化查询,环绕一个'使用(){}'结构,你的连接对象,那么你就不会需要调用'close()方法'函数的Oracle对象,以及 – MethodMan

回答

0

给出您需要打开并在每次查询执行后关闭连接。

并且在关闭连接之后还会返回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

+0

检查编辑一次。 –

+0

试试上面的代码,让我知道,如果这样的作品。 –

0

您需要关闭数据库连接,并发射了你的第二个查询之前再次打开它。

类似:

SqlConnection.Open(); 

而且

SqlConnection.Close(); 
+0

是的,我在那个功能上做了同样的事情,仍然没有工作 –

0

你需要确保你关闭两个ConnectionDataReader对象

尝试使用ExecuteReader中的CommandBehavior参数,因为它将在您关闭DataReader后返回close the connection automatically

cmd.ExecuteReader(CommandBehavior.CloseConnection) 
+0

仍然是一样的错误。 :(不工作@CaptainMarvel –

相关问题