我在C#中编写一个方法,它执行多个SQL命令并返回一个布尔值,用于确定插入是否成功。我的问题是我想将此命令作为“全有或全无”命令执行。这意味着如果我想执行3个不同的命令并且第三个命令未正确执行,则不会提交前两个命令的更改。我怎么能在SQLServer中做到这一点?
答案 0 :(得分:1)
如果要执行C#中的三个命令:
SqlTransaction tran = connection.BeginTransaction();
try
{
...exec first command and get result...
...exec second commmand and get result...
...exec third command and get result...
if (!firstResult || !secondResult || !thirdResult)
throw new Exception();
tran.Commit();
}
catch
{
tran.Rollback();
}
如果要通过调用存储过程在SQL Server中执行这三个命令,请使用:
BEGIN TRANSACTION
cmd1
cmd2
cmd3
IF @Success = 1 THEN
COMMIT TRANSATION
ELSE
ROLLBACK TRANSACTION
您还可以在SQL中使用try..catch块来捕获异常并在发生错误时回滚事务。
答案 1 :(得分:0)
您正在搜索一个事务,它将许多SQL查询(通常是INSERTS,UPDATES或DELETES)组合到一个工作单元中,您应该使用BEGIN TRAN(在开头)和COMMIT TRAN(最后)包围您的查询)。 SQL server transaction