2013-05-10 2 views
2

Мне нужно создать 2 кнопки, одну для начала транзакции (startButton) и одну для совершения транзакции (commitButton).Как использовать DataAdapter с SqlTransaction в C#?

Я застрял, пытаясь реализовать его для команды SELECT.

Когда я нажимаю commitButton, я получаю сообщение о том, что транзакция уже завершена и больше не используется.

public void startTransaction(IsolationLevel isolationLevel) { 
    connectSQL(); 
    connection.Open(); 
    transaction = connection.BeginTransaction(isolationLevel); 
    Console.WriteLine("Transaction started !"); 
} 

public void commitTransaction() { 
    this.transaction.Commit(); 
    connection.Close(); 
    Console.WriteLine("Transaction commited !"); 
} 

public DataTable readAllRezervari() { 
    try { 
     String selectSql = "SELECT * FROM Rezervari;"; 
     SqlCommand sqlCommand = new SqlCommand(selectSql, connection, transaction); 
     rezervariDataAdapter.SelectCommand = sqlCommand; 
     rezervariDataAdapter.Fill(rezervariDataSet, "Rezervari"); 
    } 
    catch (Exception e) { 
     Console.WriteLine("ERROR: " + e); 
     try { 
      transaction.Rollback(); 
     } 
     catch (Exception e2) { 
      Console.WriteLine("ERROR: " + e2); 
     } 
    } 
    finally { 
     connection.Close(); 
    } 
    rezervariDataTable = rezervariDataSet.Tables["Rezervari"]; 
    return rezervariDataTable; 
} 
+1

Я думаю, что это не достижимый таким образом, что вам нужно для временного хранения данных и использовать транзакцию только в методе SAVE. – Sunny

+1

Возможно, время ожидания подключения. –

+0

Любое другое решение о том, как разделить транзакцию на команду select на две части (startTransaction, commitTransaction)? без dataAdapter – Mythul

ответ

1

похоже, вы пытаетесь использовать Transaction Commit and Rollback как способ для совершения или откат своих изменений. Я всегда считал, что это может быть проблема с кодом или данными, которые вы могли бы предотвратить, чтобы некоторые изменения частично были совершены, что привело к плохим данным. Я действительно знаю больше vb.net, чем C#, поэтому простите меня, если мой формат отключен.

Вот мысль: совершить все свои данные в DataTable и сохранить его в переменной сеанса или просмотра состояния

что-то вроде

rezervariDataTable = session("reservari"); 

, если пользователь нажимает кнопку фиксации: Это делает код для записи транзакции в базу данных.

Если пользователь нажмет Откат:

 reservariDataTable = Nothing; 
1
using (SqlConnection cn = new SqlConnection(ConnectionString.GetConnection()))   
{    
    cn.Open(); 
    SqlTransaction transction = cn.BeginTransaction(); 
    SqlDataAdapter sda= new SqlDataAdapter("Select * From TableName", cn); 
    sda.SelectCommand.Transaction = transction; 
    sda.Fill(ds, "TableName"); 
    transction.Commit();     
} 
Смежные вопросы