2010-01-28 2 views
1

IfxCommand를 사용하여 간단한 select 쿼리를 실행하려고합니다. 격리를 더티 읽기로 설정하고 싶습니다. 그러나 IfxTransaction의 컨텍스트에서 격리 수준을 설정하는 예제 만 있습니다. 내가 select 문을 발행하는 중이므로 트랜잭션이 필요하지 않습니다. 아래는 현재 코드입니다. 이것이 최선의 접근 방법입니까? 또한 분리 수준이 더티 읽기로 설정된 기간을 알고 있다면 알고 싶습니다.ifxtransaction을 사용하지 않고 격리 설정?

DataSet ds = new DataSet(); 
     IfxConnection connection = new IfxConnection(ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString); 
     IfxCommand command = new IfxCommand(); 

     try 
     { 
      connection.Open();     
      command.Connection = connection; 
      command.CommandText = "SET ISOLATION TO DIRTY READ"; 
      command.ExecuteNonQuery(); 

      command.CommandText = BuildCommandString(); 

      IfxDataAdapter idap = new IfxDataAdapter(command.CommandText, connection); 
      idap.Fill(ds); 
     } 
+0

이 정보가 도움이됩니까? Informix에 익숙하지 않습니다. http://stackoverflow.com/questions/2111507/informix-net-provider-and-transactionscope-not-rolling-back – Amy

답변

0

겠습니까

using (var noTransaction = new TransactionScope(TransactionScopeOption.Suppress)) { 
    // Use your connection here 
} 

사용할 수 있습니까? Informix가 주변 거래에서 스스로를 모집하는지 확신 할 수 없습니까? 또는 - 당신이 중첩 된 트랜잭션에 명시 적으로 isolationlevel을 설정하려면 :

var txOptions = new TransactionOptions(); 
txOptions.IsolationLevel = IsolationLevel.ReadUncommitted; 
txOptions.Timeout.TotalSeconds * 2)); 
using (var noTransaction = new TransactionScope(TransactionScopeOption.RequiresNew, txOptions)) { 
    // Use your connection here 
} 

편집 : 그냥 Informix 및 TransactionScopes에 대해 참조 설명을 읽어 보시기 바랍니다. 솔루션을 반영하기 위해 코드를 변경해야합니다.