2017-06-05 50 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 –

相關問題