2016-06-23 4 views
2

Допустим, у меня есть кнопка Insert, в которой я получил несколько методов внутри нее, где они читают, вставляют и обновляют и т. Д. В базе данных. Можно ли использовать одну транзакцию для всех этих методов? как:Использование одной транзакции для нескольких методов C#?

private void method_A(){/* doing tons of db stuff.. */} 
private void method_B(){/*..*/} 
private void method_C(){/*..*/} 


protected void Insert_OnClick(object sender, EventArgs e) 
{ 
    //begin transaction 

    Method_A(); 

    Method_B(); 

    Method_C(); 

    //end transaction 

} 

Возможно ли это путь? Никогда ранее не использовалась транзакция. Кстати, используя MS Access db, если это имеет значение.

+0

Вы видели [это] (http://stackoverflow.com/questions/2078432/do-we-have-transactions-in-ms-access)? – PaulF

+0

@PaulF не показывает, как реализовать транзакцию через C#, или он будет работать, если я просто добавлю «BEGIN TRANSACTION» .. C# код и методы .. 'COMMIT [TRANSACTION | WORK] '' ROLLBACK [TRANSACTION | РАБОТА] '? – Nyprez

ответ

1
using (OleDbConnection connection = 
        new OleDbConnection(connectionString)) 
     { 
      OleDbCommand command = new OleDbCommand(); 
      OleDbTransaction transaction = null; 

      // Set the Connection to the new OleDbConnection. 
      command.Connection = connection; 

      // Open the connection and execute the transaction. 
      try 
      { 
       connection.Open(); 
       transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); 
    transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); 

      // Assign transaction object for a pending local transaction. 
      command.Connection = connection; 
      command.Transaction = transaction; 

       Method1(command.connection); 
       Method2(command.connection); 

      } 
    } 

Что-то в этом роде?

Таким образом, вы используете одно соединение, а затем устанавливаете уровень транзакции и запускаете свои методы.

Смотрите здесь для получения дополнительной информации: https://msdn.microsoft.com/en-us/library/93ehy0z8(v=vs.110).aspx

+0

Будет ли 'Method1();' и 'Method2();' находиться в транзакции сейчас или мне нужно передать что-либо в параметрах? – Nyprez

+0

@Nyprez Я считаю, что вам придется пройти через соединение. Но транзакция должна остаться. Думаю, –

+0

@ Andrew Kilburn это 'command' или' connection', что я должен перейти к 'Method1();' и 'Method2();'? – Nyprez

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