如何在vb.net中实现事务处理方式?

如何在vb.net中实现事务处理方式?,vb.net,ms-access,transactions,Vb.net,Ms Access,Transactions,我使用VB.net(200%)开发了一个连接MS Access数据库的应用程序,我使用TableAdapter和Dataset连接Access DB文件 我需要在保存到数据库时实现一个简单的事务方法(提交、回滚) 有没有一种方法不需要使用内联SQL语句就可以做到这一点 谢谢,您可以在上找到一系列数据访问教程当我阅读Microsoft Jet(access DB Engine)支持事务时,您可以在上找到一系列数据访问教程。因此,您可以创建如下事务(示例来自): 更简单的方法是(例如: 如果使用Tr

我使用VB.net(200%)开发了一个连接MS Access数据库的应用程序,我使用TableAdapter和Dataset连接Access DB文件

我需要在保存到数据库时实现一个简单的事务方法(提交、回滚)

有没有一种方法不需要使用内联SQL语句就可以做到这一点


谢谢,

您可以在

上找到一系列数据访问教程当我阅读Microsoft Jet(access DB Engine)支持事务时,您可以在

上找到一系列数据访问教程。因此,您可以创建如下事务(示例来自):

更简单的方法是(例如:

如果使用TransactionScope,则需要在计算机上运行MSDTC

不幸的是,TableAdapter没有公开连接属性,因此需要解决方法。因此,您需要一些变通方法:

1)反射(示例表格)

反射可能非常慢

2)交易范围(示例表格)

您将需要MSDTC

据我所知,Microsoft Jet(Access DB Engine)支持事务。因此,您可以创建如下事务(示例来自):

更简单的方法是(例如:

如果使用TransactionScope,则需要在计算机上运行MSDTC

不幸的是,TableAdapter没有公开连接属性,因此需要解决方法。因此,您需要一些变通方法:

1)反射(示例表格)

反射可能非常慢

2)交易范围(示例表格)


您将需要MSDTC

您将MDB用作数据存储,因此所涉及的只是Jet--Access与您的问题无关。您将MDB用作数据存储,因此所涉及的只是Jet--Access与您的问题无关。TableAdapters可以公开连接属性,如果您在设计器中右键单击适配器,请转到属性,然后将ConnectionModifier属性更改为Public。我使用它可以为多个表适配器共享一个连接,因此在使用TransactionScope时可以防止升级到DTC。哇,对于从未回来的人来说,这是一个非常好的工作。TableAdapters可以公开连接属性,如果您右键单击设计器中的适配器,请转到属性,然后将ConnectionModifier属性更改为Public。我使用它可以让我为多个表适配器共享一个连接,从而在使用TransactionScope时防止升级到DTC。哇,对于一个从未回来的人来说,这是一个非常好的工作。
      SqlConnection db = new SqlConnection("connstringhere");
      SqlTransaction transaction;

      db.Open();
      transaction = db.BeginTransaction();
      try 
      {
         new SqlCommand("INSERT INTO TransactionDemo " +
            "(Text) VALUES ('Row1');", db, transaction)
            .ExecuteNonQuery();
         new SqlCommand("INSERT INTO TransactionDemo " +
            "(Text) VALUES ('Row2');", db, transaction)
            .ExecuteNonQuery();
         new SqlCommand("INSERT INTO CrashMeNow VALUES " +
            "('Die', 'Die', 'Die');", db, transaction)
            .ExecuteNonQuery();
         transaction.Commit();
      } 
      catch (SqlException sqlError) 
      {
         transaction.Rollback();
      }
      db.Close();
bool IsConsistent = false;

using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())

{

      SqlConnection cn = newSqlConnection(CONNECTION_STRING );

      string sql = "DELETE Categories";

      SqlCommand cmd = newSqlCommand(sql, cn);

      cn.Open();

      cmd.ExecuteNonQuery();

      cn.Close();

      //Based on this property the transaction will commit if

      //successful.  If it fails however, this property will

      //not be set and the transaction will not commit.

      ts.Consistent = IsConsistent;

}
conn = new SqlConnection(Properties.Settings.Default.NorthwindConnectionString);
conn.Open();
trans = conn.BeginTransaction();
1. 
public SqlDataAdapter GetAdapter(object tableAdapter)
{
    Type tableAdapterType = tableAdapter.GetType();
    SqlDataAdapter adapter = (SqlDataAdapter)tableAdapterType.GetProperty("Adapter", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(tableAdapter, null);
        return adapter;
}
2.
adapter.InsertCommand.Connection = trans.Connection;
adapter.UpdateCommand.Connection = trans.Connection;
adapter.DeleteCommand.Connection = trans.Connection;

3.
adapter.InsertCommand.Transaction = trans;
adapter.UpdateCommand.Transaction = trans;
adapter.DeleteCommand.Transaction = trans;

4. 
-

5. 
trans.commit();
    CustomersDataSet.CustomersDataTable customers = new CustomersDataSet.CustomersDataTable();
   CustomersDataSetTableAdapters.CustomersTableAdapter tblAdap = new 
      CustomersDataSetTableAdapters.CustomersTableAdapter();
   using (TransactionScope txScope = new TransactionScope())
   {
       tblAdap.Fill(customers);
       customers.Rows[0]["ContactName"] = "Maria Velasquez";
       tblAdap.Update(customers);
       txScope.Complete();
   }