首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OleDBCommand,多个命令

OleDBCommand,多个命令
EN

Stack Overflow用户
提问于 2021-12-09 21:50:47
回答 1查看 251关注 0票数 -3

我有一个access表,用于跟踪每当发生其他数据导出时递增的数字。在

代码语言:javascript
复制
using (OleDbConnection con = new OleDbConnection(DatabaseProvider + DatabaseFilePath))
{
      con.Open();
      using (OleDbCommand cmd = con.CreateCommand())
      {
           cmd.CommandText = "DELETE FROM IncrementingNumberTable WHERE [Num]=" + curr + ";";
           cmd.Connection = con;
           cmd.ExecuteNonQuery();
      }
      curr++;
      using (OleDbCommand cmd = con.CreateCommand())
      {
           cmd.CommandText = "INSERT INTO IncrementingNumberTable ([Num])VALUES(" + curr + ");";
           cmd.Connection = con;
           cmd.ExecuteNonQuery();
      }
}

代码按预期工作,但在第二个命令中出现连接错误是可能的,尽管不太可能,这意味着我的递增号丢失了。这是在调试时发生的,如果它发生在一个活动的系统中,那就不是很好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 21:58:44

通常在数据库环境中处理这个问题的方式是使用事务。这将导致一系列命令作为块成功或失败,如果在中间发生错误,则会将所有内容回滚到初始状态。

我从来没有用Access (使用Server、MySql、Postgres等)做过很多次,但是有一个OleDbConnection.BeginTransaction。这个页面上有一个很好的例子,展示了如何使用它。

基于在MSDN论坛上的评论,这似乎适用于Access‘Jet数据库引擎:

嗨, 事实上,Microsoft不支持System.Transactions和TransactionScope。 如果仍然希望使用事务,则可以使用本机OleDB事务:http://msdn2.microsoft.com/en-us/library/93ehy0z8.aspx。 干杯, 弗洛林

(信用Florin Lazar - MSFT)

另一个解决方案..。

这将是在一个update命令中执行此操作,而不是delete后面跟着一个insert。就像这样:

代码语言:javascript
复制
cmd.CommandText = "UPDATE IncrementingNumberTable set [Num] = [Num] + 1 WHERE [Num]=" + curr + ";";
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70297165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档