SqlTransaction 数据库编程事务使用示例

简介: 在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。
在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。
 
下面的示例创建一个 SqlConnection 和一个 SqlTransaction。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。出现任何错误时事务都会回滚。Try/Catch 错误处理用于处理尝试提交或回滚事务时的所有错误。

using  System;
using  System.Configuration;
using  System.Data.SqlClient;
using  System.Transactions;



protected   void  Page_Load( object  sender, EventArgs e)
        {
            
            
using  (SqlConnection conn  =   new  SqlConnection(ConfigurationManager.ConnectionStrings[ " ConnStr " ].ToString()))
            {
                conn.Open();
                SqlTransaction _transaction 
=  conn.BeginTransaction();                  
                
try
                {
                    SqlCommand _cmd 
=   new  SqlCommand( " Insert Into T_Test(F_Name) values(@Name) " ,conn);
                    _cmd.Parameters.Add(
new  SqlParameter( " @Name " " Test1 " ));
                    _cmd.Transaction 
=  _transaction;
                    _cmd.ExecuteNonQuery();

                    _cmd.Parameters.Clear();
                    _cmd.Parameters.Add(
new  SqlParameter( " @Name " " Test2 "   +   new  String( ' 2 ' 100 )));
                    _cmd.ExecuteNonQuery();
// F_Name为Nvarchar(50),这里会报错

                    _transaction.Commit();

                    Response.Write(
" 二条记录已经成功入库! " );
                }
                
catch  (Exception ex)
                {
                    Response.Write(
" 发生错误: "   +  ex.Message.ToString());
                    
try
                    {
                        _transaction.Rollback();
                        Response.Write(
" <br/>事务已成功回滚! " );
                    }
                    
catch  (Exception ex2)
                    {
                        Response.Write(
" <br/>回滚失败: "   +  ex2.Message.ToString());
                    }
                }
                _transaction.Dispose();
            }
        }  

 

如果换成时下流行的Linq To Sql写法,大致如下:

using  (DataContext context  =   new  DataContext(connStr))
            {

                SqlConnection conn 
=   new  SqlConnection();                   
                
if  (context.Connection  !=   null   &&  context.Connection.State != ConnectionState.Open) context.Connection.Open();

                context.Transaction 
=  context.Connection.BeginTransaction();
                
try
                {
                    User user 
=   new  User();
                    user.Name 
=   " aaaa " ;
                    users.Add(user);
                    context.SubmitChanges();

                    users.Remove(users.Single(u 
=>  u.Name  ==   " aaaa " ));
                    context.SubmitChanges();

                    context.Transaction.Commit();
                }
                
catch
                {
                    
try
                    {
                        context.Transaction.Rollback();
                    }
                    
catch  
                    {
                        
//
                    }
                }
            }
目录
相关文章
|
6月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
650 77
|
5月前
|
中间件 关系型数据库 Go
Go语言数据库编程:数据迁移与事务控制
本文介绍了《Go语言实战指南》中关于数据库编程的核心内容,涵盖使用 GORM 进行数据迁移与事务控制。主要内容包括:AutoMigrate 方法自动创建或更新表结构;事务控制的自动与手动实现方式;事务隔离级别的设置;以及在 Gin 框架中统一管理事务的实践建议。适合开发阶段的数据库结构管理和事务性操作需求。
|
8月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
208 16
|
9月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
280 19
|
8月前
|
SQL 数据库 索引
【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks
|
11月前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
190 1
|
11月前
|
SQL 存储 Java
数据库———事务及bug的解决
事务的一些概念,并发事务以及并发事务引起的bug,脏读,不可重复读,幻读,数据库中的隔离级别,事务的简单应用
|
数据库
什么是数据库的事务隔离级别,有什么作用
【10月更文挑战第21】什么是数据库的事务隔离级别,有什么作用
196 3
|
存储 关系型数据库 数据挖掘
什么是数据库的事务隔离级别
【10月更文挑战第21】什么是数据库的事务隔离级别
354 1

热门文章

最新文章

下一篇
oss云网关配置