交易范围和使用相同连接的方法调用
我正在使用 分布式事务管理器(MSDTC)的网络访问已 禁用.请启用DTC以供安全性网络访问 使用组件服务管理的MSDTC配置 工具. 所以这是伪代码: public static void Method1() { using (TransactionScope scope = new TransactionScope()) { bool success = true; // will be set to false in an omitted catch using (var connection = new SqlConnection(ConnectionString1)) { // ... if(somethingHappened) Method2(); } if(success)
0 2024-01-19
编程技术问答社区
在TransactionScope内部进行批量插入时发生ORA-00604错误
我正在尝试使用ado.net将100k+项目插入100k+项目中.这样: using (TransactionScope transaction = new TransactionScope()) { while(/* Pagination logic - send insertion command on every 250 items */) { using (OracleCommand command = new OracleCommand(query, connection)) { command.ArrayBindCount = 250; //Add parameters command.Parameters.Add(":BLAH", OracleDbType.Long); command.Parameters[0].Value
2 2024-01-19
编程技术问答社区
隔离的ADO.NET连接和事务范围内的事务
背景:我有一个ASP.NET MVC应用程序,该应用程序使用动作过滤器将控制器操作包装在TransactionsCope中. 进一步的下游(在我的基础架构层中);我想打开一个新的ado.net连接(如果这是相关的话,则与我的外部transactionscope相同),并让它参与其自身交易 - 而不会与当前的Transactionscope绑定在控制器级别;我该怎么做? 解决方案 您通过TransactionOptions to = new TransactionOptions; to.IsolationLevel = ; using (TransactionScope scope = new TransactionScope( TransactionScopeOption.RequiresNew, to)) { ... do work here scope.Complete (); } 请小心,那座桥下有龙.特别是,如果包
0 2024-01-19
编程技术问答社区
在存储过程事务中使用TransactionScope不工作
根据我的理解,C#TransactionScope在存储过程中包装T-SQL BEGIN / COMMIT TRANSACTION时仍然可以工作. 我有以下C#方法,该方法首先EF Save,然后调用具有自己的事务的存储过程,然后通过HTTP 调用外部服务 public async Task DoSomething(MyDto dto) { using (var scope = new TransactionScope()) { //Save First var myEntity = await _dbContext.MyEntity.Where(x=>x.Id == dto.Id).SingleOtDefaultAsync(); // Assign properties here from dto to MyEntity and then save entity
0 2024-01-19
编程技术问答社区
交易范围的细微差别
让我们想象一下,我有两个线程,它们以读取隔离级别的线程特异性transactionscopes执行一些面向数据库的代码.但是有一些表应该共享数据(不应创建重复的数据). using (var transactionScope = new TransactionScope(IsolationLevel.ReadCommitted)) { ...//some code if (!_someRepository.IsValueExists(value)) _someRepository.AddData(value); ...//some code transactionScope.Complete(); } 问题是两个线程都可以检查数据是否在几乎同一时间存在,如果不是 - 创建重复的数据(约束在这里无济于事:我必须防止出色的情况发生).我想这是一个微不足道的问题,但是通常如何解决? 我看到以下原理解决方案: using (var tra
0 2024-01-19
编程技术问答社区
对于一个无写交易来说,哪个更便宜/更快。COMMIT还是ROLLBACK?
我正在使用SQL Transactions作为Applock和其他并发机制的容器,因此我有时会在只读取数据而不写入的各种隔离级别上创建交易.我相信,在这种情况下,从逻辑上讲,提交和回滚具有相同的结果. 出于性能原因,我想知道服务器要执行哪个更便宜/更快?是否需要为提交案件进行优化的不可避免的簿记,即使没有写信,也需要为回滚的额外开销吗?锁将在任何一种情况下都会发布. 如果没关系,那么我就不必用不必要的scope.Complete()乱扔我的.NET TransactionsCope代码,这可能会使我在审查其他单纯阅读的操作的代码时感到犹豫. 谢谢! 解决方案 由于您没有编写任何内容,因此您还应该选择提交,除了结束交易外,还可以发布您可能拥有的任何锁.尽管从技术上回滚也可以做同样的事情,但是提交总是比回滚更快.
4 2024-01-19
编程技术问答社区
在交易范围内,"该交易已经被隐式或显式地提交或中止"。
我在两个不同的网络DB1和DB2(远程数据库)上有一个Web服务器和两个DB服务器. DB1:SQL Server 2008 R2,操作系统:Windows Server 2003 SP2 DB2:SQL Server 2000,操作系统:Windows Server 2003 R2 Web服务器:Windows Server 2003 R2 我想在这些数据库中插入两个不同的记录,我正在使用TransactionScope. using (TransactionScope tscope = new TransactionScope(TransactionScopeOption.RequiresNew)) { //open connection db 1 //insert into db1 //open connection db2 -- the problem is here //insert into db2 tscop
4 2024-01-19
编程技术问答社区
具有不同隔离级别的内部事务Scope,如何实现?
当前的 TransactionsCope 的实现缺乏在嵌套范围中更改隔离度的能力. 但是,SQL Server允许我们在任何时候更改隔离级别,为什么TransactionsCope不允许?我不明白. 在BCL中,关于嵌套的SQL交易及其隔离水平是否有任何标准,禁止这种行为.我有什么选择?我当然不能设计班级库,并促进隔离水平以及它们的缘故,只是为了使用它们. 如果方法 a()想要一个快照级别,并调用方法b()想要读取订单级别.方法 a()在我开发的图书馆中,方法 b()在图书馆中,该图书馆由虚构的公司开发. a() call b() groment exception ? 解决方案 这是理论问题,而不是任何特定产品的问题.基本上,交易的原始概念是具有所有酸性特性​​的东西:原子,一致,孤立和耐用. 现在,考虑"隔离级别"的含义:从本质上讲,出于绩效或其他原因,我们可以选择放弃数据库对酸度的某些或全部保证.隔离和原子能是密切相关的,就像彼此双重的一样.打破一个
8 2024-01-19
编程技术问答社区
跨AppDomains和流程的交易范围
使用System.Transactions(主要是TransactionsCope)是实际的吗? depportentEntentTransaction 仅在一个AppDomain内部工作./p> 解决方案 是的,它有效.我们正在通过WCF进行交易,呼吁使用过程交易com+组件,并手动将交易从.NET 2.0 ASMX Web服务传递到WCF服务. 现在,这并不是说设置不是挑剔的.我认为大多数问题都是在所有服务器上正确设置MSDTC. 更新 我们不使用DependentClone.我们使用GetTransactionFromTransmitterPropagationToken将事务作为字节阵列传递.与跨应用程序传播交易. 作为一个例子: 客户端: public void CallOutOfProcessAndPassTransaction { Client client = new Client(); client.DoS
0 2024-01-19
编程技术问答社区
TransactionScope帮助器在没有失败的情况下耗尽了连接池-帮助?
不久前,我问了一个问题,当时我没想到会升级为MSDTC. (以前的问题) 在SQL2005中,为了使用TransactionsCope,您只能在TransactionsCope的寿命内实例并打开单个SQLConnection.使用SQL2008,您可以实例多个SQLConnections,但是只能在任何给定时间打开一个. SQL2000将始终升级为DTC ...我们不支持应用程序中的SQL2000,Winforms应用程序,BTW. 我们对仅单连接问题的解决方案是创建一个称为localtransactionscope(又名'lts')的Transactionscope助手类.它包裹了一个transactionscope,最重要的是,为我们的应用程序创建和维护一个SQLConnection实例.好消息是,它起作用 - 我们可以在不同的代码中使用LTS,并且它们都加入了环境交易.很不错.问题是,创建的每个 root lts实例都会创建并有效地杀死连接池.通过"有效杀死",我的意思
4 2024-01-19
编程技术问答社区
SQLTransaction已完成错误
我的应用程序中有一次以下错误. 此SQLTRANSACTION已完成;它不再可用 堆栈跟踪附在下面 - 它说大约Zombie Check和Rollback. 代码中有什么错误? 注意:此错误仅出现一次. 更新 来自 msdn -sqltransaction.rollback method 回滚如果连接终止或交易已经回到服务器上的交易,则会生成无效的Exception. 来自僵尸检查交易 - 错误 我看到在各种应用程序中出现此错误的最常见原因之一是在我们的应用程序上共享 sqlConnection. 代码 public int SaveUserLogOnInfo(int empID) { int? sessionID = null; using (SqlConnection connection = new SqlConnection(connectionString)) {
2 2024-01-19
编程技术问答社区
实体框架和Transactionscope没有;在释放Transactionscope后无法恢复隔离级别
我在交易范围和实体框架中有点挣扎. 最初,我们希望应用程序中的所有连接在读取数据时使用快照隔离级别,但是在某些情况下,我们希望以读取或读取未承诺的隔离级别读取数据,为此,我们将使用交易范围来更改查询的隔离级别(如此处和不同博客中的几篇文章中指出). 但是,问题在于,当交易范围被处置时,隔离仍然保留在连接上,这会引起很多问题. 我尝试了所有类型的变体,但结果相同;隔离级保留在交易范围之外. 是否有人可以为我解释这种行为或可以解释我做错了什么? 我通过将交易范围封装在一次性的类别中,为我恢复了隔离级别,但我想对这种行为进行很好的解释,我认为这种行为不仅会影响我代码,但也是其他代码. 这是一个说明问题的extepode: using (var context = new MyContext()) { context.Database.Connection.Open(); //Sets the connection to default
6 2024-01-19
编程技术问答社区
在SQL Server 2014中围绕有事务的存储过程使用TransactionScope
我正在使用c#和ado.net和a TransactionScope在ASP.NET应用程序中运行交易.该交易应该可以在多个表中保存一些数据,然后将电子邮件发送给订阅者. 问题:当它在SQL Server 2014中具有自己的交易的存储过程中,还是删除SQL TransAction语句,即. begin tran,commit tran和rollback tran在此TransactionScope中调用的存储过程中的语句? 下面提到了此情况的C#代码以及存储过程的T-SQL代码. c#使用TransactionScope: 代码 try { using (TransactionScope scope = new TransactionScope()) { using (SqlConnection connection1 = new SqlConnection(connectString1))
2 2024-01-19
编程技术问答社区
连接突然中断时ADO.Net事务的命运
我们在一台计算机上遇到问题,并带有错误消息: "服务器上的msdtc不可用." 代码使用 transactionscope 包装一些lingtosql数据库代码;交易内部还有一些原始的ado.net. 作为仅访问单个SQL数据库(2005),为什么完全使用分布式事务? (我不想知道如何启用MSDTC,因为代码需要使用其当前设置在服务器上工作) 解决方案 当您的事务使用多个数据库连接时,这几乎总是发生.因此,假设您正在更新两个表.您可以使用一个连接更新第一个表,但使用其他第二个连接更新第二个表.这将导致交易升级到MSDTC,即使使用TransactionsCope对象也是如此. 我们解决的方式是在执行交易时,我们为所有写作使用一个数据库上下文对象.这消除了升级.自从这样做以来,我们从未出现过MSDTC消息. 兰迪
交易范围过早完成
我有一个在TransactionsCope中运行的代码块,并且在代码的此块中,我对DB进行了多次调用.选择,更新,创建和删除,整个范围.当我执行删除时,我会使用SQLCommand的扩展方法执行它,该方法将自动重新提交查询,如果此查询可能会陷入困境,该查询可能会遇到僵局. 我相信,当僵局击中僵局并且该功能试图重新提交查询时,就会发生问题.这是我收到的错误: 与当前连接相关的交易已经完成,但尚未处理.交易必须在连接执行SQL语句之前处置. 这是执行查询的简单代码(以下所有代码在使用TransactionsCope中执行): using (sqlCommand.Connection = new SqlConnection(ConnectionStrings.App)) { sqlCommand.Connection.Open(); sqlCommand.ExecuteNonQueryWithDeadlockHandling(); } 这是重新提交僵
4 2024-01-19
编程技术问答社区
添加一个没有App.Config的DbProviderFactory
我已经"继承"了一个小C#方法,该方法可以创建一个ado.net sqlcommand对象,并在要保存到数据库的项目列表上循环(SQL Server 2005). 现在,使用了传统的SQLConnection/SQLCommand方法,为确保一切有效,将两个步骤(删除旧条目,然后插入新条目)包裹在Ado.net sqltransaction中. . using (SqlConnection _con = new SqlConnection(_connectionString)) { using (SqlTransaction _tran = _con.BeginTransaction()) { try { SqlCommand _deleteOld = new SqlCommand(......., _con); _deleteOld.Transaction = _tran; _del
2 2024-01-19
编程技术问答社区
在什么情况下,SqlConnection会自动被列入一个环境中的TransactionScope事务中?
SQLConnection在交易中"入伍"是什么意思?这仅仅意味着我执行连接的命令将参与交易? 如果是这样,在哪些情况下是sqlconnection 自动征集到环境transactionscope交易中? 请参阅代码注释中的问题.我对每个问题的答案的猜测都遵循括号中的每个问题. 方案1:在交易范围内打开连接 using (TransactionScope scope = new TransactionScope()) using (SqlConnection conn = ConnectToDB()) { // Q1: Is connection automatically enlisted in transaction? (Yes?) // // Q2: If I open (and run commands on) a second connection now, // with an identical connecti
0 2024-01-19
编程技术问答社区
SQL Server:跨池连接的隔离级别泄漏
如先前的堆栈溢出问题所示( transactionscope and connection compope and connection ploming " https://stackoverflow.com/questions/3759897/3759897/how-does-sqlconnection-manage-isolationlevel"> sqlConnection如何管理隔离级别?),交易隔离级别与SQL Server和ADO的汇总连接泄漏. net(也是系统.转变和EF,因为它们在ado.net的顶部建立). 这意味着,在任何应用程序中都可能发生以下危险事件序列: 发生的请求需要明确的交易以确保数据一致性 任何其他请求都不会使用明确的交易,因为它只是进行不判定的读取.现在,该请求将执行为序列化,可能会导致危险的阻塞和僵局 问题:防止这种情况的最佳方法是什么?现在到处使用明确的交易真的需要? 这是一个独立的复制.您会看到第三个查询将从第二个查询继承可
0 2024-01-19
编程技术问答社区
没有DTC的TransactionScope替代品
是否有任何替代transactionscope的选择,不需要启用DTC ?? 在交易中,我需要进行两个操作: 创建一个用户(使用会员-SQL会员提供商) 做一个插入操作. 解决方案 TransactionsCope使用.NET中的LTM-轻质事务管理器.只有当您在同一交易中打开多个连接或在数据库之间进行的连接,应transactionscope促进交易到基于2PC的TX-ENAGER,DTC. . 对于MS SQL Server 2008及更高版本,DTC只有在与不同的 dbs打开连接时才会涉及.或者,如果您要从多个线程打开同一交易中的连接 作为一个副点:我在 castle.transactions.transactions.transactions . 侧点#2:如果您使用TransactionsCope,请确保明确声明隔离级别,否则您将序列化所有交易(iNCLATIONLEVEL.SERIALIZABLE)! 其他解决方案 在会员的连接字符串
0 2024-01-07
编程技术问答社区
如何在.NET 4.0中用Microsoft.Bcl.Async在TransactionScope中支持异步方法?
我的方法类似于: public async Task SaveItemsAsync(IEnumerable items) { using (var ts = new TransactionScope()) { foreach (var item in items) { await _repository.SaveItemAsync(item); } await _repository.DoSomethingElse(); ts.Complete(); } } 这当然有问题,因为TransactionScope在异步/等待中效果不好. 它在InvalidOperationException上失败了: "必须将transactionscope处置在其创建的同一线程上." 我阅读了有关但是,对于这个特定的项目,我很难支持
4 2024-01-07
编程技术问答社区