c#同时插入两个表数据,如果其中一个出问题,则回滚

两个表,一个索引表,一个内容表,我需要往这两个表同时插入数据,索引一定是插入一条数据,而内容表有可能一次插入多条数据,必须保证索引成功后,插入内容出问题,则回滚,如果没有问题,则结束

一 : 使用事务(具体百度)

二 : 简单使用SQL语句
1、插入第一个表后根据返回影响行数判断是否插入成功,成功就插入第二个表,反之则不插入第二个表了。追问

我看的都是两个表只插入一条数据,我这里是第二表插入多条数据

追答

还不是一样的...

追问

我怎么感觉不一样,假如第二个表我要插入10条数据,你能把表传入存储过程?

追答

事务开始:
try
{
myConn.Open();
Transaction = myConn.BeginTransaction(); //事务开始
Cmd.Transaction = Transaction; //将Cmd指向Transaction事务

string strSQL= "insert 表1 ";
Cmd.CommandText = strSQL; //插入第一个表
Cmd.ExecuteNonQuery(); //失败 则回滚

strSQL= "insert 表2 ";
Cmd.CommandText = strSQL; //插入第二个表
Cmd.ExecuteNonQuery(); //失败 则回滚

//插入第N个表
//、、、、、
、、

Transaction.Commit(); //提交事务

}
catch (Exception e)
{
Transaction.Rollback(); //撇消事务
throw new Exception(e.Message);
}

追问

你这是程序端解决的,假如有10个数据,你在插入第5条数据的时候,客户端网络连接断开了,数据库会回滚吗

追答

只要没有执行到这句话 Transaction.Commit(); //提交事务

本来就没有提交 不存在回滚。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-15
私聊帮你完成
第2个回答  2014-07-15
可以程序端做事务:
假设你有两个方法
bool InsertTbindex(){}
bool InsertTbcontext(){}

using (TransactionScope ts = new TransactionScope())
{
bool result = true;
if (InsertTbindex())
{
for (int i = 0; i < 2; i++)
{
if (InsertTbcontext() == false)
{
result = false;
break;
}
}
if (result)
ts.Complete();
}
}追问

假如你在循环的时候网络断开了,数据库也能判断自动回滚吗?

追答

if (result)
ts.Complete();
看这条语句,它没有执行,往数据库写的数据都会回滚
你循环的时候,断网了,ts.Compleate()不会执行,肯定会回滚

追问

ts.Complete(); 你这个应该要在网络连接的时候才能运行吧

追答

不明白你的意思。
实践出真理,自己尝试一下吧

本回答被网友采纳

C#如何把一行记录同时插入到两个表中
如果你要是不在意数据的一致性,可以使用连续的两个insert语句直接插入就行,一般来说只要你数据输入校验做的比较好绝大部分情况不会出现问题。如果你对数据一致性要求比较搞,比如设计到公司财务、重要资料数据,可以使用sqlserver的事务机制。一般在存储过程中加入事务处理就行了。中间出现错误它会自动回滚到...

我用的C# 同时向主表和子表插入数据,而子表要一次插入多条怎么能...
主表与子表一起要插入数据,最好就是用事务,防止主表有数据子表未能成功的插入,写成事务,一次提交,就OK 了!

c# 保存注册时,可以把注册信息同时插进两张表中吗?
可以,执行两个sql语句,插入数据即可。。。

C# 回滚问题
如果这些操作可以写在一个方法里,可以在调用这个方法时开启事务,根据这个方法的返回值进行提交还是回滚。如果是多个方法就把connection对象作为参数传递进去,开启事务在需要的时候进行回滚。

数据库 为何使用 回滚
2、对数据进行操作时,如果数据报错,如批量插入数据,其中有一条无法插入,那么此次的操作就会被视为无效,数据库就会回滚,以保证数据的完整性。3、在程序开发时,是以事务为原子性操作的,此时可能因为一个业务操作会对数据库的多个表进行增删改,如果中间出现问题,那么对已操作部分的数据怎么办呢?

在c#里如何编写删除sql中多个表中的数据的代码
---清空数据库db_test中所有用户表中的数据 use db_test go CREATE PROCEDURE sp_DeleteAllData AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'--禁用约束 EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'--禁用触发器 EXEC sp_MSForEachTable 'DELETE FROM ...

C#做的管理系统,多人同时使用问题
不会崩溃,除非程序设计存在缺陷,比如打开数据库连接使用完后没有关闭导致数据库连接池耗尽等 产生的现象一般称之为并发冲突 脏读,比如一个用户修改了一条数据,而此时另一个用户在读取这条数据可能会读取到修改前的数据。 或者比如同时有两个用户在修改同一条数据,数据库中只会存储最后提交的更新,...

asp.net中怎么同时向多张表插入记录了,只有有一个插入失败,全部执行...
Console.WriteLine("执行回滚事务时出现 " + ex.GetType() + " 违例!" + ex.Message);} } Console.WriteLine("在执行数据库命令时出现 " + e.GetType() + " 违例!" + e.Message);Console.WriteLine("两条数据库命令均未完成.");} finally { \/\/关闭Connection if(sqlConnection != null...

c#.net处理支付接口返回出错或者超时回滚的问题
你在数据库中用两个字段表示支付成功,用户提交修改一个状态,当得到接口返回时修改另一个状态,最后你判断这两个字段是否同时成功了,如果没有那么就提示用户支付失败。

java ssh框架,在插入一条数据出错后怎么回滚所有数据
数据量不大的情况下,使用循环插入,最后全部通过才提交commint。这样,只要中间有出错,全部都会回滚。如果数据量大,那就每次导入前,先创建一个临时表,先把数据插入到临时表中,catch到异常,就删除临时表。如果没有异常,把临时表中的数据插入到目标表。

相似回答