zoukankan      html  css  js  c++  java
  • 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语句还是成功执行并插入数据库了

  • 相关阅读:
    java 保留2位小数 转载
    android表格效果ListView隔行变色
    安卓学习之排版RelativeLayout表格布局
    安卓学习之如何关闭所有的activity
    安卓学习之android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
    [转]Android 实现TextView中文字链接的方式
    OOP编程iBatis 学习笔记之二 单表增删改操作
    OOP编程iBatis 学习笔记之三 2个表或者多表关联查询
    安卓学习之排版TableLayout表格布局
    (原创)C#反射知识分享之二
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6196826.html
Copyright © 2011-2022 走看看