专栏首页菩提树下的杨过SqlTransaction 数据库编程事务使用示例

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

在提交或回滚 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 
                     {
 //
...

                     }
                 }
             }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Swift3.0服务端开发(四) MySQL数据库的连接与操作

    本篇博客我们来聊聊MySQL数据库的连接与操作。如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库。在Mac OS中使用brew包管理器进行MyS...

    lizelu
  • 配置SharePoint 2013 Search 拓扑结构

    在单台服务器上安装了 SharePoint Server 2013,并且创建了具有默认搜索拓扑的 Search Service 应用程序。在默认搜索拓扑中,所...

    用户1161731
  • Python快速学习第八天

    本文内容全部出自《Python基础教程》第二版 10.1 模块 现在你已经知道如何创建和执行自己的程序(或脚本)了,也学会了怎么用import从外部模...

    汤高
  • 开放的计算能力为数据库瘦身

    开放的计算能力为数据库瘦身 计算封闭性导致臃肿的数据库 我们在上一期谈到,数据库的臃肿,也就是过多的中间表以及相关存储过程,是由于其计算封闭性造成的。如果能够实...

    企鹅号小编
  • 列式存储的另一面

    列式存储的另一面 列存是常见的数据存储技术,在许多场景下也确实很有效,因而也被不少数据仓库类产品采用,在业内列存也常常就意味着高性能。 可是,列存真有这么好吗?...

    企鹅号小编
  • DDD理论学习系列(6)-- 实体

    1.引言 实体对应的英语单词为Entity。提到实体,你可能立马就想到了代码中定义的实体类。在使用一些ORM框架时,比如Entity Framework,实体作...

    圣杰
  • ABP入门系列(13)——Redis缓存用起来

    源码路径:Github-LearningMpaAbp 1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用户,以...

    圣杰
  • ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇

    在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇。在本文中,将为大家介绍ASP.NET ...

    用户1161731
  • 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结。数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下。当然数据结构相关博客中我...

    lizelu
  • iOS逆向工程之Reveal工具的安装、配置与使用

    今天博客内容比较简单,不过还是蛮重要的。经常有小伙伴在QQ上私下问我,说博客中是如何使用Reveal查看AppStore中下载应用的UI层级的,那么就在今天这篇...

    lizelu

扫码关注云+社区

领取腾讯云代金券