如何在c#中使用DataAdapter和SqlTransaction

本文关键字:DataAdapter SqlTransaction | 更新日期: 2023-09-27 18:12:59

我需要创建2个按钮,一个用于启动事务(startButton),一个用于提交事务(commitButton)。

我被卡住了,试图实现它的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;
}

如何在c#中使用DataAdapter和SqlTransaction

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();                 
}

看来您正在尝试使用事务提交和回滚作为用户提交或回滚更改的一种方式。我一直认为,在代码或数据出现问题的情况下,您可以防止部分提交的多个更改导致坏数据。我对vb.net的了解真的比c#多,所以请原谅我的格式不对。

这是一个想法:将所有的数据提交到一个数据表中,并将其存储在会话变量或视图状态

比如

 rezervariDataTable  = session("reservari");

如果用户点击提交按钮:它执行代码将事务写入数据库。

如果用户点击回滚:

     reservariDataTable = Nothing;