.net sql 事物

问题描述

问题如下:现在sql数据库中有两张表table1,table2,。我要同时向这两张表更新数据。要两张表都更新成功了则算成功。比如:table1更新成功了。而table2更新数据失败。则算失败。要将table1的数据返回到更新前如果用SqlTransaction事物控制,则能达到效果。但是假如我现在有一张表table3,要对table3和table2进行同样的操作。不是又要建一个SqlTransaction事物吗???还有是能不能有其他的方法实现。。。求各位大神们释疑啊。。。

解决方案

解决方案二:
是啊,当然你可以写一个公共的入口,里面提供事务的开始和结束功能,你只需要把你的操作动态的传入即可
解决方案三:
你搜索下TransactionScope
解决方案四:
事务控制回滚是最简单直接的方式
解决方案五:
引用2楼starfd的回复:

你搜索下TransactionScope

这个我用过。。事物代码块。每次有这种操作都要再写一次。。。感觉不是很科学啊
解决方案六:
谁说需要再写一次的using(TransactionScopescope=newTransactionScope()){if(UpdateTable1()&&UpdateTable2()&&UpdateTable3()){//上面上个方法分别为单独更新某表的方法scope.Commit();}}

解决方案七:

解决方案八:
我怎么看不懂你说的是什么把3个操作放在一个事物里不就解决了?一个事物里可以支持多个sql的更新和回滚。
解决方案九:
看情况,TABLE1、TABLE2、TABLE3如果是三者都需要更新成功才可以,就写在一起如果TABLE1、TABLE2更新与TABLE2、TABLE3更新没必然联系,可以分开写
解决方案十:
使用事务同时提交多个数据表更新数据privatevoidFrm_Main_Load(objectsender,EventArgse){//创建数据库连接对象SqlConnectionsqlConn=newSqlConnection("DataSource=WIN-GI7E47AND9R\LS;Database=db_TomeTwo;uid=sa;pwd=;");List<String>strSqls=newList<string>();//创建集合对象StringstrDelete1="deleteFromtb_AuthorWhereAuthorId='99'";//定义删除第一个表的SQL语句strSqls.Add(strDelete1);//将SQL语句添加到集合中StringstrDelete2="deleteFromtb_AuthorsBookWhereAuthorId='99'";//定义删除第二个表的SQL语句strSqls.Add(strDelete2);//将SQL语句添加到集合中stringstrInsert1="insertintotb_Authorvalues('99','zhd')";//定义添加第一个表的SQL语句strSqls.Add(strInsert1);//将SQL语句添加到集合中stringstrInsert2="insertintotb_AuthorsBookvalues('66','C#范例大全','99')";//定义添加第二个表的SQL语句strSqls.Add(strInsert2);//将SQL语句添加到集合中if(ExecDataBySqls(strSqls,sqlConn))//如果执行成功{MessageBox.Show("提交tb_Author数据表成功!","信息提示");MessageBox.Show("提交tb_AuthorsBook数据表成功!","信息提示");}else{MessageBox.Show("提交tb_Author数据表失败!","信息提示");MessageBox.Show("提交tb_AuthorsBook数据表失败!","信息提示");}//codego.net/15/4/37/SqlDataAdaptersqlda1=newSqlDataAdapter("select*fromtb_Author",sqlConn);//创建数据桥接器对象SqlDataAdaptersqlda2=newSqlDataAdapter("select*fromtb_AuthorsBook",sqlConn);//创建数据桥接器对象DataSetmyds=newDataSet();//创建数据集对象sqlda1.Fill(myds,"tb_Author");//填充数据集sqlda2.Fill(myds,"tb_AuthorsBook");//填充数据集dataGridView1.DataSource=myds.Tables["tb_Author"];//对第一个DataGridView进行数据绑定dataGridView2.DataSource=myds.Tables["tb_AuthorsBook"];//对第二个DataGridView进行数据绑定}//<paramname="strSqls">使用List泛型封装多条SQL语句</param>//<paramname="sqlConn">数据库连接</param>publicboolExecDataBySqls(List<string>strSqls,SqlConnectionsqlConn){boolbooIsSucceed=false;//声明提交数据是否成功的标记SqlCommandsqlCmd=newSqlCommand();//创建SqlCommand对象sqlCmd.Connection=sqlConn;//设置SqlCommand对象的Connection属性if(sqlConn.State==ConnectionState.Closed){sqlConn.Open();//打开数据库连接}SqlTransactionsqlTran=sqlConn.BeginTransaction();//开始一个事务try{sqlCmd.Transaction=sqlTran;//设置SqlCommand对象的Transaction属性foreach(stringiteminstrSqls){sqlCmd.CommandType=CommandType.Text;//设置命令类型为SQL文本命令sqlCmd.CommandText=item;//设置要对数据源执行的SQL语句sqlCmd.ExecuteNonQuery();//执行SQL语句并返回受影响的行数}sqlTran.Commit();//提交事务,持久化数据booIsSucceed=true;//表示提交数据库成功}catch{sqlTran.Rollback();//回滚事务,恢复数据booIsSucceed=false;//表示提交数据库失败!}finally{sqlConn.Close();//关闭连接strSqls.Clear();//清除列表strSqls中的元素}returnbooIsSucceed;//方法返回值}

时间: 2024-10-02 12:08:39

.net sql 事物的相关文章

sql 事物造成的死锁问题怎么解决

问题描述 sql 事物造成的死锁问题怎么解决 做了个程序,局域网内多个用户进行下面sql事物操作的时候容易出现死锁的情况,使得部分用户户无法插入数据,下面是简化版,大概的意思有了,请问该如何优化修改 begin transaction declare @errorSum int set @errorSum=0 if ((select 1 from Table1 where student_sn=@student_sn) = 1) begin update Table1 set is_chk=0

MS SQL 事物日志传送能否跨数据库版本吗?

    SQL SERVER的事物日志传送(log shipping)功能,相信很多人都使用过或正在应用,这是MS SQL提供的一个非常强大的功能,一般需要一个主数据库服务器(primary/production database server)和辅助数据库服务器(standby server)来完成这个配置,默认情况下,主数据库和辅助数据库的版本应该是一致的,那么如果这两个数据库版本不一致,会不会有什么问题?还能做log shipping配置吗? 那么数据库版本不一致分两种情况:     1:

SQL Sever 博客文章目录(2016-07-06更新)

SQL Server方面的博客文章也陆陆续续的写了不少了,顺便也将这些知识点整理.归纳一下下.方便自己和他人查看.   MS SQL 数据类型   三大数据库对比研究系列--数据类型   MS SQL 表和视图   数据库表的基本信息,你知道吗? 数据查询表,列名对比 MS SQL 建表SQL的脚本 查看数据库.表.索引的物理存储情况 慎用SELECT INTO复制表   MS SQL 索引约束 [翻译] 聚集索引表 VS 堆表 SQL SERVER 中is null 和 is not null

[c#基础]使用抽象工厂实现三层

引言 昨天加了一天班,今天闲来无事,就在想如何将之前的三层和最近一直在学的设计模式给联系在一起,然后就动手弄了个下面的小demo. 项目结构 项目各个层实现 Wolfy.Model层中有一个抽象类BaseModel.cs,User.cs是用户实体类,继承与BaseModel类,是用于类型安全考虑的,让各实体类有个统一的父类,在其他层使用的时候,可以使用里氏替换原则的考虑. 1 using System; 2 using System.Collections.Generic; 3 using Sy

数据库访问类(直接执行数据库操作)

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; //引入数据库的命名空间 u

mysql事物执行成功,但前半部分sql丢失

问题描述 mysql事物执行成功,但前半部分sql丢失 有没大神遇到过这样的问题:mysql事物 中,前半部分的sql执行结果在数据库中消失了,后半部分的在数据库中又存在,?而且后半部分的写入的sql有些字段的值,是前半部分sql执行的结果查询出来的 解决方案 让powerdesigner生成的sql语句在mysql上成功执行让powerdesigner生成的sql语句在mysql上成功执行

sql server-sqlserver 事物的使用

问题描述 sqlserver 事物的使用 项目中使用了事物来提交增删改. sqlhelp.OpenTransaction(); sqlhelp.ExecuteNoQuery(sql); sqlhelp.CommitTransaction(); 事物提交期间,表是锁住的,不能select出数据,但是如果sql执行的时间过长,使用的次数过多,就会导致select经常要等着,能不能让select在事物执行期间也能查询,不锁表,查到的数据不是最新的也无所谓. 解决方案 使用 NOLOCK 或 READP

Java事物回滚失效,在抛出异常的情况下仍然提交了SQL

问题描述 Java事物回滚失效,在抛出异常的情况下仍然提交了SQL private Connection connection; private Statement pre; public String set(String goal,String marriage){ return "update info set goal='"+goal+"'where marriage='"+marriage+"'"; } public void star

AOP事物导致service执行sql不能全部执行,求大神解答

问题描述 AOP事物导致service执行sql不能全部执行,求大神解答 太扯淡了,我在servicel里调用dao做了三个更新,使用AOP控制事物的时候,只执行了一个更新,求大神解答 解决方案 是事务吧,只执行一个更新.说明其它两个有错,事务回滚了.代码放上来看看,AOP 解决方案二: 看看配置中事务的配置,还是具体代码具体分析