winform插入sql的事务处理
实现目的:点击按钮,原子性执行两条sql语句,同时成功或同时失败
数据库有这三个字段(忽略已有的一条记录):

一、用事务的sql语句
按钮事件完整代码:
//事务处理插入sql语句
using (SQLiteConnection con = new SQLiteConnection("Data Source=xxx.db3;Pooling=true;FailIfMissing=false;Password=123456"))
{
using (SQLiteCommand cmd = new SQLiteCommand())
{
con.Open();
SQLiteTransaction sqltran = con.BeginTransaction();//用的SQLite数据库,其他数据库相应变化
cmd.Connection = con;
cmd.Transaction = sqltran;
try
{
cmd.CommandText = string.Format("insert into jy_cdjy_workflow(id,cjsbh,status) values (1,2,3)");
cmd.ExecuteNonQuery();
cmd.CommandText = string.Format("insert into jy_cdjy_workflow(id,cjsbh,status) values (4,5,6,6)");//故意多添加一个值,看看错误
cmd.ExecuteNonQuery();
sqltran.Commit();//执行完要提交
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);//抛出的异常消息
sqltran.Rollback();//如果某条sql语句执行不成功,回滚 }
}
}
故意将第二条sql语句写错
点击按钮:

弹出错误,而且也把第一条执行的sql语句回滚了,数据库中没有添加数据

二、没有用事务处理插入sql语句
//没有事务处理插入sql语句
using (SQLiteConnection con = new SQLiteConnection("Data Source=C:/Users/Administrator/Documents/Visual Studio 2010/Projects/gjjy/gjjy/db/gjjy.db3;Pooling=true;FailIfMissing=false;Password=gjjy_jinhetech123"))
{ using (SQLiteCommand cmd = new SQLiteCommand())
{
con.Open();
//SQLiteTransaction sqltran = con.BeginTransaction();
cmd.Connection = con;
//cmd.Transaction = sqltran;
try
{
cmd.CommandText = string.Format("insert into jy_cdjy_workflow(id,cjsbh,status) values (1,2,3)");
cmd.ExecuteNonQuery();
cmd.CommandText = string.Format("insert into jy_cdjy_workflow(id,cjsbh,status) values (4,5,6,6)");
cmd.ExecuteNonQuery();//sqltran.Commit();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
//sqltran.Rollback(); }
} }
点击按钮:

虽然第二条抛出错误,但是第一条sql语句还是成功执行并插入数据库了

winform插入sql的事务处理的更多相关文章
- SQL SERVER事务处理
SQL SERVER事务处理 一.事务定义: 事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分. 如果事务遇到错误且必须取消或回滚,则所有 ...
- 向已写好的多行插入sql语句中添加字段和值
#region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...
- SQL Server 事务处理 回滚事务
--创建表: GO CREATE TABLE [dbo].[tb1]( [Id] [int] NOT NULL, [c1] [nvarchar](50) NULL, [c2] [datetime] N ...
- 将DataTable 数据插入 SQL SERVER 数据库
原文:将DataTable 数据插入 SQL SERVER 数据库 以下提供3中方式将DataTable中的数据插入到SQL SERVER 数据库: 一:使用sqlcommand.executenon ...
- c#执行插入sql 时,报错:异常信息:超时时间已到。在操作完成之前超时时间已过或服务器未响应
问题:c#执行插入sql 时,报错:异常信息:超时时间已到.在操作完成之前超时时间已过或服务器未响应 解决: SqlCommand cmd = new SqlCommand(); cmd.Comman ...
- Oracle与SQL Server事务处理的比较
事务处理是所有大型数据库产品的一个关键问题,各数据库厂商都在这个方面花费了很大精力,不同的事务处理方式会导致数据库性能和功能上的巨大差异.事务处理也是数据库管理员与数据库应用程序开发人员必须深刻理解的 ...
- c# + Sql server 事务处理
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便 ...
- JAVA插入sql代码
插入数据 import java.sql.*; /** * @version 2012-02-22 * @author */ public class InsertDemo { public stat ...
- sql server 事务处理
事物处理 事务是SQL Server中的单个逻辑单元,一个事务内的所有SQL语句作为一个整体执行,要么全部执行,要么都不执行. 事务有4个属性,称为ACID(原子性.一致性.隔离性和持久性) ...
随机推荐
- Oracle的热备份
一. 什么是热备份 热备份也叫联机备份,它是指数据库处于open状态下,对数据库的数据文件.控制文件.参数文件.密码文件等进行一系列备份操作(其中数据文件是必须备份的). 它要求数据库处在归档模式下. ...
- 巧妙的实现 CSS 斜线(炫酷的小效果)
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果 ...
- system v和posix的共享内存对比 & 共享内存位置
参考 http://www.startos.com/linux/tips/2011012822078.html 1)Linux和所有的UNIX操作系统都允许通过共享内存在应用程序之间共享存储空间. 2 ...
- 工作流学习——Activiti流程定义管理三步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46602419 ***************************************** ...
- 第四章 Python外壳:代码结构
Python的独特语法: 不使用分号结束语句,而是回车: 通过代码缩进来区分代码块: if.while.for等,都不用括号,但不能没有冒号(:). 如何将一行命令分为多行? >>> ...
- vitamio 缓冲一部分时,loading还没消失,直接点击播放,loading未能消失
在videoView的start()中 添加loading消失语句,效果很好 ,也没有出现任何问题
- dede标签调用
关键描述调用标签: <meta name="keywords" content="{dede:field name='keywords'/}">&l ...
- 初接触eclipse和前后端调试问题 待续
1.eclipse得连上服务器(tomcat).有JDK,才能跑起来.跑起来之后在本地localhost的行为eclipse的控制台上就可以看到,同样eclipse上对代码有所改动,浏览器上的loca ...
- Java位操作全面总结
转载: Java位操作全面总结 在计算机中所有数据都是以二进制的形式储存的.位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快.在实际编程中,如果能巧妙运用位操作,完全可以达到 ...
- css3属性 transition transform
1.transition 译:过渡,转变 可以设置过渡属性 transition: property duration timing-function delay; transition-proper ...