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

SqlTransaction 数据库编程事务使用示例在提交或回滚SqlTransaction时,应始终使用Try/Catch进行异常处理。如果连接终止或事务已在服务器上回滚,则Commit和Rollback都会生成InvalidOperationException。 下面的示例创建一个SqlConnection和一个SqlTransaction。此示例还演示如何使用BeginTransaction、Commit和…

大家好,又见面了,我是你们的朋友全栈君。

在提交或回滚 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;

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


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
 
                    {

                        

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


                    }
                }
            }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142705.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu更换国内源

    ubuntu更换国内源ubuntu16.04和18.04更换国内源写在前面:安装好ubuntu双系统后,默认的软件更新源是国外的,在国内使用速度很慢,用”aptinstallxxx”安装软件时可能出现”网络不可达”、”你的网络需要认证吗”、”无法定位软件包”等错误,所以我们需要更换成国内的源,这样才能正常安装和更新软件。一、ubuntu16.04更换国内源1.备份原始源文件source.list桌面…

    2022年6月4日
    102
  • python小项目:2、猜数字

    python小项目:2、猜数字

    2021年10月5日
    53
  • 微服务 eureka_变压吸附的原理

    微服务 eureka_变压吸附的原理文章目录前言一、Eureka是什么?二、Eureka是干什么的?1.服务治理三、Eureka原理解析1.总体流程2.读入数据总结前言       随着互联网技术的发展,系统用户量的增长,很多系统都采用了分布式的方式进行部署。这个固然大大提高了系统的性能和可用性,但是分布式部署导致各种服务数量大增,这给我们进行服务治理和运维带来了困扰。一、Eureka是什么?     &nbsp

    2022年4月19日
    38
  • SMTP服务器未设置_smtp服务器怎么填

    SMTP服务器未设置_smtp服务器怎么填什么是smtp服务器呢?smtp服务器是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。不过很多用户都不知道怎么去打开这个smtp服务器,针对这个问题,接下来小编给大家做详细介绍。解决方法如下:1、打开IIS开始菜单-运行或者winr快捷键,然后在运行中输入inetmgr按回车;2、如果出现错误提示说明IIS没有安装或者是服务没有启用;3、在ISS中连接栏中选中…

    2022年9月27日
    3
  • 【小白的java成长系列】——面向对象基础

    【小白的java成长系列】——面向对象基础

    2021年11月13日
    39
  • Linux之lsof命令

    Linux之lsof命令

    2021年10月8日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号