2013-05-10 34 views
2

我需要創建2個按鈕,一個用於啓動事務(startButton),另一個用於提交事務(commitButton)。如何在C#中使用DataAdapter和SqlTransaction?

我試圖執行它的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

我想是不是可以實現這種方式,你需要臨時存儲的數據,僅在保存方法使用事務。 – Sunny 2013-05-10 20:24:28

+1

可能是連接超時。 – 2013-05-10 20:32:03

+0

關於如何將select命令的事務拆分爲2部分(startTransaction,commitTransaction)的其他解決方案?沒有dataAdapter – Mythul 2013-05-10 20:36:08

回答

1

看來您正嘗試使用事務提交和回滾作爲用戶提交或回滾其更改的方式。我一直認爲這是因爲代碼或數據存在問題,您可以防止多次更改被部分提交,導致數據不正確。我真的比c#知道更多的vb.net,所以如果我的格式是關閉的,請原諒我。

這裏有一個想法:他們所有的數據提交到數據表,並將其存儲在一個會話變量或視圖狀態

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();     
} 
相關問題