问题标签 [transactionscope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
860 浏览

c# - SQL Server Transactions --- C#

I need a help. Let me first explain the scenario with a small sample.

Suppose I have a Students table with columns:

This table has huge number of records.

Now, I want to calculate the TotalMarks of each student and update the TotalMarks column.

Now coming to my C# Console App I am calling to stored procedures:

SP1 => I am fetching top two records at a time which has InProcess = 0 and IsTotalCalculated = 0, sets its InProcess = 1 and do the processing. (Has a SELECT and UPDATE)

SP2 => Finally again update these two rows which updates its IsTotalCalculated = 1 and InProcess = 0 (UPDATE)

Concern: My concern is as soon as I select the 2 rows for processing then any other Console App instance should not select these 2 rows for processing. What should I do?
Note: I have put the C# code of my two SPs in a TransactionBlock.

Thanks,

Justin Samuel

0 投票
2 回答
10073 浏览

c# - 带有 TransactionScope 的嵌套事务

如果你有这样的事情:

内部 TransactionScope scope2 是否也会被回滚?

0 投票
1 回答
2536 浏览

c# - 为什么 TransactionScope 使用实体框架会导致问题?

我有一个问题,我知道是本地的,与事务范围有关,可能是 MSDTC(我不太了解)。

另一个项目开发人员(相同的代码库,所有提交的内容)执行整个解决方案,但是当我尝试从数据库中获取一些数据时(并非总是如此),出现以下错误:

如果我评论 using 事务范围、complete() 和所有内容,它会按预期工作。

你以前有过这个问题吗?

编辑:

引发此错误的查询非常简单,例如:

编辑,解决:

服务器的 lmhosts 已过时。

0 投票
2 回答
1496 浏览

sql-server-2008 - TransactionScope 问题 - 我怎样才能让 DTC 不参与其中?

(我知道围绕 DTC 和促进交易的情况对于我们这些不知情的人来说可能有点神秘,但让我向您展示我的公司是如何做事的,如果您能告诉我为什么 DTC 参与其中,如果可能的话,我能做些什么来避免它,我将不胜感激。)

我有在 ASP.Net 网络服务器上运行的代码。我们有一个数据库,SQL 2008。

我们的数据访问代码看起来像这样——我们有一个数据访问层,它使用 SQLConnections 和 SQLCommands 的包装对象。典型用法如下所示:

所以确实,SqlClient、SqlConnection 等的一个非常薄的包装器。我想在一个事务中运行几个存储的过程,而包装器类不允许我访问 SqlTransaction,所以我不能将它从一个组件传递到下一个组件. 这导致我使用 TransactionScope:

当我这样做时,DTC 参与其中,不幸的是,我们的网络服务器没有在 MSDTC 设置中启用“允许远程客户端”——让 IT 允许这将是一场斗争。

我很想避免 DTC 卷入其中,但我可以这样做吗?我可以省略 methods1-3() 中的事务调用,让 TransactionScope 弄清楚吗?

0 投票
2 回答
5027 浏览

.net - 在transactionscope中打开sql连接重要吗

我创建了一个sqlconnection,CN1。然后这个CN1被打开。稍后在代码中有一个事务范围。如果我在这个 CN1 连接上执行一个 sql 命令,这是在事务中吗?

代码如下所示;

0 投票
1 回答
535 浏览

c# - ASP.NET:使用连接池和嵌套事务正确实现嵌套 API 调用

我需要知道执行以下操作的最佳方法。我有嵌套的业务级 API(比如 1 级和 2 级)。L1 需要调用 L2。这两个 API 都直接在自己的嵌套级别使用数据库层。

现在,在数据库层,我每次都从池中获取数据库连接,如下所示:

  1. 如上所述在每个数据库级别调用中每次都获取数据库连接是否合适?我知道它会从 ASP.NET 连接池返回一个连接。

  2. 但是,在整个嵌套调用(或在当前的 http 请求生命周期)中保持相同的数据库连接不是更好吗?

  3. 每次从池中获取连接会导致嵌套 TransactionScopes 出现问题吗?

0 投票
4 回答
1984 浏览

.net - 为什么 TransactionScope 不假定成功?

TransactionScope 期望调用其 Complete 方法,如下所示。否则不会提交事务。

假设成功的实现不是更合适吗?这意味着在标准情况下(成功)需要更少的代码。

如果出现异常或调用诸如“回滚”之类的方法(此方法当前不存在),则可以回滚事务。

请注意,仅在问题未导致异常的情况下才需要 questionOccurred 标志。在这种情况下,将自动执行回滚。

我有兴趣进一步了解为什么使用此实现。

更新:到目前为止,一些答案认为如果使用我描述的实现,则需要一个 try-catch 块。不是这种情况。当使用块中未处理异常时,事务会自动回滚。现有实现和我描述的实现都是这种情况。有关详细信息,请参阅此处的“完成事务范围”部分。

更新2:我终于明白答案中的解释了。这不是一种语言结构,可以以任何语言设计者认为合适的方式解释 - 它是 IDisposable 模式的实现。如果没有调用 Complete,Dispose 方法中的代码将不知道调用它是因为 using 块中的代码成功执行还是因为发生了异常。我在想像下面这样的东西,其中事务和回滚都是关键字。

如果需要将事务选项传递给 TransactionScope,这当然会出现问题。

0 投票
1 回答
1842 浏览

c# - 在抑制的事务范围内执行 select sql 查询

在 c# 的事务范围中设计了一个选择 sql 查询(例如从 table1 中选择 *)。通常有一个环境事务,但是如果我在执行这个 sql 查询时抑制环境事务,是否有性能提升?

0 投票
4 回答
3465 浏览

c# - ADO 实体框架是否支持非 DTC 事务?一个 EntityContext 和一个 TransactionScope 内的多个查询导致 DTC 提升

我有一个使用实体框架的 Web 应用程序 - 我们使用 TransactionScope 类来提供环境事务。

有没有办法告诉 EF 使用标准 T-SQL 事务而不是 DTC 事务?我们经常对一个 EntityContext 和一个 TransactionScope 实例中的不同表进行多次查询,但这似乎总是将事务提升为 DTC

我已经把一个简短的例子放在一起,见下文。对单个表的查询正确地启动了一个 T-SQL 事务并且在连接 SPID 54 上然后对 ContactUs 表进行查询,并且 EF 在另一个连接 (SPID 53) 上执行此操作,这具有促进事务的连锁效应到 DTC 交易。**

0 投票
1 回答
184 浏览

c# - 如何在 TransactionScope 中取消阻止被父进程 (Insert Stmt) 阻止的进程 (Insert Stmt)

我在父母中有一个TransactionScope孩子TransactionSope。子代TransactionScope在单一父代下被多次创建、执行和提交TransactionScope

父 TransactionScopeInsert在等待第二组插入语句一个接一个地完成执行时,负责将单个记录写入数据库。

完成第一个事务后,在子事务的第一次插入时出现问题。经过昨天以来的大量研究,我现在发现第二个插入运行的进程被第一个插入的进程阻塞。

SP_WHO2我通过在程序运行的情况下在 sql server 中运行发现了这一点。

同时,插入过程中涉及的两个表之间存在一对多的关系。第一个插入在父表上执行它的操作,而第二个将在子表上执行。

每当我删除两个表之间的关系约束时,事务都会通过,但在约束打开时不会

我的问题是如何解锁被第一个插入阻止的第二个进程?