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语句还是成功执行并插入数据库了

时间: 2024-11-07 00:44:15

winform插入sql的事务处理的相关文章

SQL Server事务处理

1 /// <summary> 2 /// SQL Server事务处理 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btn_Tran_click(object sender, EventArgs e) 7 { 8 //------------

LoadRunner11之批量插入SQL数据~2

LoadRunner11之批量插入SQL数据 1.背景:数据库需要大量数据时,通过前台界面录入数据,是一个很麻烦的事情,这个时候可以借助工具来对数据库进行批量插入. 2.协议选择:我们选择的是LoadRunner11+webservice协议. 3.分析工作:(1)在录制之前,需要分析插入数据表字段的特性,是唯一还是随机,是否需要拼接等等 (2)表和表之间的关系,主外键以及关联的字段等 目的:为了更好的参数化数据,便于造的数据更加接近真实数据. 目前有2个表,student和stuclass c

c# + Sql server 事务处理

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性.在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性:一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理:现在通过一个典型的银行转账的例子来说明一下这两个例子的用法我们先来看看sql存储过程是如何来完成事务的

数据库订正脚本性能优化两则:去除不必要的查询和批量插入SQL

最近在做多数据库合并的脚本, 要将多个分数据库的表数据合并到一个主数据库中. 以下是我在编写数据订正脚本时犯过的错误, 记录以为鉴. 不必要的查询 请看以下语句: regiondb = db.Houyiregiondb() houyidb = db.Houyidb(read_only=False) regiondbRet = regiondb.query(vmmacsFromRegiondbSql) houyidbRet = houyidb.query(vmmacsFromHouyidbSql)

C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中

主要运用表类型 1 Create table BulkTestTable( 2 Id nvarchar(32), 3 UserName nvarchar(32), 4 Pwd nvarchar(32) 5 ) 6 Go 7 CREATE TYPE BulkUdt AS TABLE 8 (Id nvarchar(32), 9 UserName nvarchar(32), 10 Pwd nvarchar(32) ) C#端读取Excel /// <summary> /// 读取Excel中数据 /

C#语言Winform防SQl注入做用户登录的例子

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace OmyGod {     public partial

获取表数据的插入SQL

DECLARE @TABLE_NAME VARCHAR(200) SET @TABLE_NAME = 'myFunction' --表名 DECLARE @TABLE_CONDITION VARCHAR(200) SET @TABLE_CONDITION = 'where Application=''0303'' AND FunctionType=''功能''' --条件 DECLARE @sql VARCHAR(5000) SET @sql='' DECLARE @col VARCHAR(50

Python批量插入SQL Server数据库

因为要做性能测试,需要大量造数据到数据库中,于是用python写了点代码去实现,批量插入,一共四张表 简单粗暴地插入10万条数据 import pymssql import random __author__ = 'sryan' class GenerateData: def __init__(self): print('init') self.conn = None self.cur = None def connect(self, host, user, password, database

【C#】WinForm 之 SQL Server 服务监控器(避免开机启动服务)

由于刚刚开始写博客加上最近人又懒,很多过去的项目都没时间去整理,先把以前写过的一个小工具发上来吧. 关于MS-SQL服务优化 安装过MS-SQL Server的人应该知道,系统会因此多出4.5项新的服务 SQL Active Directory Helper 服务 SQL Server (SQLEXPRESS)  这个是Visual Studio自带的,单独安装过数据库管理工具的数据库名字会不同 SQL Server Browser SQL Server VSS Writer SQL Serve