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

 

转载于:https://www.cnblogs.com/Donnnnnn/p/6196826.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值