具有StoredProcedure类型的SqlCommand是否提供外部事务?

时间:2013-12-13 09:07:50

标签: c# .net sql-server transactions sqlcommand

我有这个用于调用存储过程的代码:

 //SqlConnection connection = ...;

 using (SqlCommand command = connection.CreateCommand())
 {
     command.CommandType = CommandType.StoredProcedure; 
     command.CommandText = "usp_MyProc";
     command.ExecuteNonQuery();
 }

,存储过程如下:

CREATE PROCEDURE [dbo].[usp_MyProc]
AS
BEGIN
BEGIN TRAN
    -- SOME STATEMENTS IN HERE
COMMIT TRAN
RETURN 0
END

事务是由那些BEGIN TRANCOMMIT TRAN语句控制的还是由SqlCommand类以某种方式引起的外部事务?

1 个答案:

答案 0 :(得分:1)

SqlCommand不会生成自动交易。

存储过程事务是否具有控制权取决于在执行SQLCommand时是否已存在打开的事务。

如果没有打开的事务,则存储过程中的BEGIN TRANS..COMMIT TRANS将控制事务。