2015-11-11 3 views
1

Я использую SqlTransaction для серии вставки command-Закрыть SqlConnection при использовании SqlTransaction

connection.Open(); 
transaction = connection.BeginTransaction(); 
command.Transaction = transaction; 
command.CommandText="Insert into ...."; 
connection.Close(); 

//Doing some other task and then again open connection. 
connection.Open(); 
command.CommandText="Insert into ...."; 
connection.Close(); 

И, наконец,

transaction.Commit(); 
if (transaction != null) { transaction.Rollback(); } 

Мой вопрос, я могу закрыть эту связь во время использования транзакции? Мне нужна функция RollBack.

Любая помощь?

+2

Нет, вы не можете. Транзакция привязана к соединению. Почему вы хотите закрыть соединение после выполнения каждой команды? – Dennis

+0

Другой вопрос: является ли распределенная транзакция опцией для вас? – Dennis

ответ

0

Вы можете закрыть соединение после завершения транзакции. что-то вроде ниже

class Transaction 
{ 
    public Transaction() 
    { 
     string FirstQuery = "INSERT INTO Table1 VALUES('Vineeth',24)"; 
     string SecondQuery = "INSERT INTO Table2 VALUES('HisAddress')"; 
     int ErrorVar = 0; 
     using (SqlConnection con = new SqlConnection("your connection string")) 
     { 
      try 
      { 
       SqlCommand ObjCommand = new SqlCommand(FirstQuery, con); 
       SqlTransaction trans; 
       con.Open(); 
       trans = con.BeginTransaction(); 
       ObjCommand.Transaction = trans; 
       //Executing first query 
       //What ever operation on your database do here 

       ObjCommand.ExecuteNonQuery(); //Exected first query 
       ObjCommand.CommandText = SecondQuery; 
       ObjCommand.ExecuteNonQuery(); //Exected first query 
       //Everything gone fine. So commiting 
       ObjCommand.Transaction.Commit(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error but we are rollbacking"); 
       ObjCommand.Transaction.Rollback(); 
      } 
      con.Close(); 
     } 
    } 
} 

Или вы можете использовать TransactionScope

+2

Использование-заявление должно уже закрыть соединение. Явный вызов '.Close()' не требуется. – Caramiriel

+2

'SqlTransaction' и' SqlCommand' являются 'IDisposable' тоже. Где «использовать» блоки для них? – Dennis

 Смежные вопросы

  • Нет связанных вопросов^_^