SqlTransaction 数据库编程事务使用示例
时间:2022-04-24
本文章向大家介绍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
{
//
...
}
}
}
- 使用PowerShell简化我的工作
- 几个提高工作效率的Python内置小工具
- J2EE相关总结
- (53) 剖析Collections - 算法 / 计算机程序的思维逻辑
- Flask使用Blueprint进行多模块应用的编写
- 优雅的在终端中编写Python
- Eclipse相关问题
- (54) 剖析Collections - 设计模式 / 计算机程序的思维逻辑
- Django 博客教程(三):创建应用和编写数据库模型
- package-info.java文件详解
- 在Spring下集成ActiveMQ
- Java中只有按值传递,没有按引用传递!
- 我是如何使用Python来自动化我的婚礼的
- left join 过滤条件写在on后面和写在where 后面的区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HTTP Status 503 - Server is shutting down or failed to initialize
- LinkedHashMap 源码剖析
- 基于SSM框架与Maven的CRUD案例
- Java 8的这个新特性,你用了吗?
- JSP+Servlet项目整合
- springboot 整合 Mybatis、JPA、Redis
- 数据库中设置列/字段自增(Oracle和Mysql)
- 数据库中日期的插入(Oracle和Mysql)
- 浅谈在进行jsp页面编程时,路径问题的解决(绝对路径与相对路径)
- 浅谈springMVC中,中文乱码的显示问题(持续更新)
- 数据库的优化方法,一般人我不告诉他(建议收藏)
- idea 远程调试
- 嘘!高效快速的刷访问量(偷偷收藏)
- 进行JDBC操作时,连接参数的配置(附DBUtil工具类)
- JavaEE中,考勤(签到签退)功能的实现