如何在 vb.net 中实现交易方式?

     2023-05-06     235

关键词:

【中文标题】如何在 vb.net 中实现交易方式?【英文标题】:How to implement transaction way in vb.net? 【发布时间】:2008-11-18 08:59:06 【问题描述】:

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

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

有没有办法做到这一点而不需要使用内联 SQL 语句?

谢谢,

【问题讨论】:

您将 MDB 用作数据存储,因此只涉及 Jet -- Access 与您的问题无关。 【参考方案1】:

正如我所读,Microsoft Jet(Access DB 引擎)支持事务。所以你可以像这样创建一个事务(来自CodeProject的例子):

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

更简单的方法是(来自15 Seconds 的示例):

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;


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

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

1) 反射(示例形式CodeProject)

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

反射可能很慢!

2) TransactionScope(示例表单DevX.com)

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

您将需要 MSDTC!

【讨论】:

TableAdapters 可以公开一个连接属性,如果您在设计器中右键单击适配器,转到属性,然后将 ConnectionModifier 属性更改为 Public。我使用它来允许我为多个表适配器共享单个连接,因此在使用 TransactionScope 时防止升级到 DTC。 哇,对于一个再也没有回来过的人来说,这是一项非常棒的工作。【参考方案2】:

你可以在http://www.asp.net/learn/data-access/找到一堆数据访问教程

【讨论】:

在 VB.NET 中实现 bittrex API

】在VB.NET中实现bittrexAPI【英文标题】:ImplementbittrexAPIinVB.NET【发布时间】:2018-01-2711:30:00【问题描述】:根据BittrexAPIDocs,它说他们使用标准HMAC-SHA512签名。将apikey和nonce附加到您的请求并计算HMAC哈希并将其包含在apisign标头下。... 查看详情

如何在选择案例语句中实现枚举

】如何在选择案例语句中实现枚举【英文标题】:HowtoimplementEnuminselectcasestatement【发布时间】:2014-01-0718:33:32【问题描述】:我有一个包含许多项目的枚举,我想在VB.NET的selectcase语句中实现这些项目,就像我们在c#.net中所做的... 查看详情

如何在 laravel 中实现诸如 Fiverr 之类的信用卡和贝宝交易

】如何在laravel中实现诸如Fiverr之类的信用卡和贝宝交易【英文标题】:HowtoImplementcreditcardandpaypaltransactionslikefiverrinlaravel【发布时间】:2017-12-0805:19:35【问题描述】:我想在我的laravel网站中集成诸如Fiverr或upwork之类的交易。我尝... 查看详情

如何在iOS的XMPPFramework中实现发送好友请求的方式?

】如何在iOS的XMPPFramework中实现发送好友请求的方式?【英文标题】:HowtoimplementthewaytosendafriendrequestinXMPPFrameworkiniOS?【发布时间】:2013-12-2907:46:24【问题描述】:我已经想出了在XMPPRoster中使用MainAppDelegate.m中的以下内容接受订阅... 查看详情

如何以干净的方式在 Spring Data Redis 中实现事务?

】如何以干净的方式在SpringDataRedis中实现事务?【英文标题】:HowtoimplementtransactioninSpringDataRedisinacleanway?【发布时间】:2014-03-0700:48:12【问题描述】:我正在关注here上的RetwisJ教程。在这我不认为Redis事务被实现。例如,在下面... 查看详情

如何在 Fragments 中实现 onBackPressed()?

】如何在Fragments中实现onBackPressed()?【英文标题】:HowtoimplementonBackPressed()inFragments?【发布时间】:2011-07-2320:22:18【问题描述】:有没有一种方法可以在AndroidFragment中实现onBackPressed(),类似于我们在AndroidActivity中的实现方式?由... 查看详情

我们如何以编程方式在 Android Q OS 中实现可搜索的进度条?

】我们如何以编程方式在AndroidQOS中实现可搜索的进度条?【英文标题】:HowcanweachieveseekableprogressbarinAndroidQOSprogramatically?【发布时间】:2019-10-2817:59:36【问题描述】:AndroidQBeta2为音乐通知添加了一个可搜索的进度条,那么我们... 查看详情

在 VB.NET 中将 DateTime 转换为等效的十六进制

...lentinVB.NET【发布时间】:2011-09-1407:51:58【问题描述】:我如何在VB.NET中实现相同的功能,这在SQLServer中很容易完成。SELECTCAST(GETDATE()ASVARBINARY(8))--GIVESTHECURRENTTIMEINHEX现在我的问题是如何在VB.NET中 查看详情

如何在 RecyclerView 中实现 StartActivityForResult

】如何在RecyclerView中实现StartActivityForResult【英文标题】:HowtoimplementStartActivityForResultinRecyclerView【发布时间】:2018-07-1916:07:21【问题描述】:我正在尝试在我的RecyclerView中使用startActivityForResult并且不知道如何...尝试了这种方式... 查看详情

如何在 Rails 中实现“业务规则”?

】如何在Rails中实现“业务规则”?【英文标题】:Howtoimplement"businessrules"inRails?【发布时间】:2011-06-2714:59:06【问题描述】:Rails中实现“业务规则”的方式是什么?假设我有一辆车想卖掉它:car=Cars.find(24)car.sellcar.sell方... 查看详情

如何在 WebGL 中实现阴影映射?

】如何在WebGL中实现阴影映射?【英文标题】:HowtoimplementshadowmappinginWebGL?【发布时间】:2016-01-1413:34:45【问题描述】:我第一次尝试在WebGL场景中实现阴影,据我所知,最直接的方法是使用阴影贴图,但我找不到解释这个概念的... 查看详情

如何在 Python 中实现向量自回归?

】如何在Python中实现向量自回归?【英文标题】:HowtoimplementVectorAuto-RegressioninPython?【发布时间】:2013-08-2307:28:00【问题描述】:我想在python中实现向量自回归。我的数据保存为3个列表的列表。我找到了这个-http://statsmodels.sourcef... 查看详情

如何在 grails 中实现请求超时?

】如何在grails中实现请求超时?【英文标题】:HowdoIimplementarequesttimeoutingrails?【发布时间】:2011-04-1123:02:22【问题描述】:我希望能够在grails中设置可配置的(通过控制器/操作)请求超时。目标是以确定性的方式处理罕见的高... 查看详情

如何在 iOS 中实现这种风格?

】如何在iOS中实现这种风格?【英文标题】:HowcanIachievethisstyleiniOS?【发布时间】:2012-06-1814:02:55【问题描述】:在我的应用程序中,我想在我的UITableViewController屏幕中显示一个弹出屏幕,列出一些供用户选择的选项。类似于Face... 查看详情

如何在flutter中实现agora视频通话邀请

】如何在flutter中实现agora视频通话邀请【英文标题】:howtoimplementagoravideocallinvitationinflutter【发布时间】:2021-10-0309:07:42【问题描述】:我是Flutter新手我想知道使用agoraSDK实现视频通话邀请的最佳方式双方。//joingchannelStringtoken=aw... 查看详情

在 Hibernate 中实现基于条件的搜索页面的优雅方式

...时间】:2011-04-2301:29:41【问题描述】:使用Hibernate,您将如何设计和实现搜索条件页面(该页面具有多个可编辑/可选字段/下拉菜单作为搜索条件),这样查询不应使数据访问器代码混乱。我的意思是没有基于条件的查询字符串... 查看详情

如何在 C 中实现位集?

】如何在C中实现位集?【英文标题】:HowtoimplementabitsetinC?【发布时间】:2011-05-2107:50:34【问题描述】:我一直在Java中使用Bitset类,我想在C中做类似的事情。我想我必须像C中的大多数东西一样手动完成。什么是一种有效的实现... 查看详情

用python在股票交易中实现布林带策略(代码片段)

布林带(BOLL)指标是美国股市分析家约翰·布林根据统计学中的标准差原理设计出来的一种非常简单实用的技术分析指标。一般而言,股价的运动总是围绕某一价值中枢(如均线、成本线等)在一定的范围内... 查看详情