8

我需要创建 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;
}
4

2 回答 2

13
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();                 
}
于 2016-09-09T05:07:22.797 回答
2

您似乎正在尝试使用事务提交和回滚作为用户提交或回滚其更改的一种方式。我一直认为,如果代码或数据出现问题,您可以防止部分提交的多项更改导致错误数据。我真的比 c# 更了解 vb.net,所以如果我的格式关闭,请原谅我。

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

就像是

 rezervariDataTable  = session("reservari");

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

如果用户点击回滚:

     reservariDataTable = Nothing;
于 2013-05-11T07:02:27.800 回答