Tag: sqltransaction

如何检查Dotnet事务是否回滚?

如何检查dotnet交易是否已关闭?

子父交易回滚

我有一个场景,我必须处理多个.sQL文件,每个文件包含3-4个插入或更新查询,现在当文件中的任何查询失败时,我rollback整个事务意味着我们将回滚整个文件,以及所有其他在该文件被提交之前执行的文件,我想要一个选项,其中用户可以rollback整个事务意味着执行的文件中的所有查询以及在该特定文件包含错误之前执行的所有文件,并且如果用户想要跳过该特定文件但是我们将只是rollback包含错误的单个文件所有其他文件将被提交,我现在正在使用SQL Transaction,没有TransactionScope但显然我可以切换到TransactionScope()如果需要和可能,目前我的代码伪(我想要的)是as如下 Var Files[] for each (string query in Files) { Execute(Query) IF(TRUE) CommitQuery() Else result=MBOX(“IF You want to abort all files or skip this one”) if(result=abort) rollbackall() else QueryRollBack() }

SQL Server序列差距

我有一个SEQUENCE ,用于设置表的事务对开: CREATE SEQUENCE [Seq].[Folio] AS [bigint] START WITH 114090 INCREMENT BY 1 MINVALUE -9223372036854775808 MAXVALUE 9223372036854775807 CACHE 今天只是为了好奇我做了一个: SELECT folio FROM transactions ORDER BY folio DESC 如果有差距会有什么意外,因此表中缺少对开页。 例: 898,897,894,892,890,889 …… 这意味着事情正在发生。 为了提供更多信息,我使用的INSERT存储过程在INSERT INTO…之前有以下内容INSERT INTO… DECLARE @numfolio int SELECT @numfolio = NEXT VALUE FOR Seq.Folio 从我的应用程序保存信息时,我使用了数据库事务,所以如果一切顺利,那么应用程序执行COMMIT TRANSACTION ,如果不是,我执行ROLLBACK TRANSACTION 。 我认为问题的根源是事务,所以当出现错误时,序列的NEXT VALUE已经生成, ROLLBACK对此没有影响。 有任何线索如何解决这个问题,以便有一个没有间隙的完美序列?

SQL Server:在事务中包装SELECT查询是否有任何性能损失?

作为学习练习,在尝试使用任何ORM(如EF)之前,我想使用ADO.NET和存储过程构建个人项目。 因为我不希望我的代码随着时间的推移变得混乱,我想使用一些模式,如存储库和UoW模式。 除了交易处理之外,几乎所有事情都已经解决了。 以某种方式’模拟’一个UoW,我使用了@jgauffin提供的这个类 ,但阻止我使用该类的是每次你创建该类的新实例( AdoNetUnitOfWork )时,你自动开始一个事务并且有一个很多情况下你只需要读取数据。 在这方面,这是我在我读过的一本SQL书中找到的: 在事务中执行SELECT语句可以在引用的表上创建锁定,这可以阻止其他用户或会话执行工作或读取数据 这是AdoNetUnitOfWork类: public class AdoNetUnitOfWork : IUnitOfWork { public AdoNetUnitOfWork(IDbConnection connection, bool ownsConnection) { _connection = connection; _ownsConnection=ownsConnection; _transaction = connection.BeginTransaction(); } public IDbCommand CreateCommand() { var command = _connection.CreateCommand(); command.Transaction = _transaction; return command; } public void SaveChanges() { if (_transaction == null) throw new InvalidOperationException(“Transaction […]

如何在c#中使用sqltransaction

我正在使用以下代码一次执行两个命令。 我使用sqltransaction来确保所有命令都被执行或回滚。当我运行没有“事务”的程序时它运行正常但是当我使用“事务”时它们显示错误。 我的代码如下; SqlTransaction transaction = connectionsql.BeginTransaction(); try { SqlCommand cmd1 = new SqlCommand(“select account_name from master_account where NOT account_name = ‘BANK’ AND NOT account_name = ‘LOAN'”, connectionsql); SqlDataReader dr1 = cmd1.ExecuteReader(); while (dr1.Read()) { comboBox1.Items.Add(dr1[0].ToString().Trim()); } cmd1.Dispose(); dr1.Dispose(); SqlCommand cmd2 = new SqlCommand(“select items from rate”,connectionsql); SqlDataReader dr2 = cmd2.ExecuteReader(); while (dr2.Read()) { comboBox2.Items.Add(dr2[0].ToString().Trim()); […]