1

我正在用 C# 编写一个方法,它执行多个 SQL 命令并返回一个布尔值,以确定插入是否成功。我的问题是我想将此命令作为“全有或全无”命令执行。这意味着如果我想执行 3 个不同的命令并且第三个命令未正确执行,则前两个命令的更改不会提交。请问如何在 SQLServer 中执行此操作?

4

2 回答 2

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 块来捕获异常并在发生错误时回滚事务。

于 2013-04-16T20:19:06.220 回答
0

您正在搜索一个事务,它将许多 SQL 查询(通常是 INSERTS、UPDATES 或 DELETES)组合到一个工作单元中,您应该用 BEGIN TRAN(在开头)和 COMMIT TRAN(在结尾)包围您的查询。 SQL 服务器事务

于 2013-04-16T20:19:53.357 回答