2012-03-29 48 views
2

我用的方法使用選擇statiments.When我使用鏈接數據庫,我得到的錯誤使用select statiment到gettable(ORA-01453 SET TRANSATION必須TRANSATION的第一條語句。)如何在事務中使用oracledataadapter?

我知道孤子,但我不能使用OracledataAdapter的Transaction methot。

我想使用Commit()... Rollback()。

這是我的代碼:

private System.Data.DataTable GetDataTable_(string SqlStatement, bool fromProcCall) 
     { 

      OracleConnection Con = new OracleConnection(); 
      try 
      { 
       Con = Connection(); 
       OpenConnection(Con, fromProcCall); 

       //----------------------------------------- 
       DateTime startTime = DateTime.Now; 
       //----------------------------------------- 
       DataSet ds = new DataSet(); 

       OracleDataAdapter sda = new OracleDataAdapter(SqlStatement, Con);     
       sda.Fill(ds, "tbl1"); 
       //----------------------------------------- 
       if (!fromProcCall) 
        DurationOfIfsAction = DateTime.Now.Subtract(startTime).Milliseconds; 
       else 
        DurationOfFirstIfsAction = DateTime.Now.Subtract(startTime).Milliseconds; 
       //----------------------------------------- 

       CloseConnection(Con); 
       return ds.Tables[0]; 
      } 
      catch (Exception ex) 
      { 
       if (Con != null) 
       { 
        try 
        { 
         CloseConnection(Con); 
        } 
        catch (Exception) { } 
       } 
       throw new Exception("ERROR[" + ex.Message + "]"); 
      } 
     } 

回答

3

基本上,你可以做這樣的事情:

oraConn = new OracleConnection("CONNECTION STRING"); 
oraConn.Open(); 

//Command with transaction 
OracleCommand oraCom = oraConn.CreateCommand(); 
oraCom.CommandText = "INSERT QUERY"; 
oraCom.Transaction = oraCom.Connection.BeginTransaction(IsolationLevel.ReadCommitted); 

//Execute 
if (oraCom.Connection.State == ConnectionState.Closed) 
{ 
     oraCom.Connection.Open(); 
} 

oraCom.ExecuteNonQuery(); 

//Commit/Rollback 
oraCom.Transaction.Commit(); // or oraCom.Transaction.Rollback(); 

要使用DataAdapter的使用,這個概念是相同的:創建交易設置DataAdapter.SelectCommand.Transaction然後您可以使用Commit()Rollback()進行控制。

相關問題