2013-12-13 29 views
0

我有此代碼用於調用存儲過程:使用StoredProcedure類型的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類引起的?

+0

好的,謝謝............... –

回答

1

A SqlCommand不會生成自動事務。

存儲過程事務是否有控制權取決於在執行SQLCommand時是否已經存在打開的事務。

如果沒有未處理的事務,則存儲過程中的BEGIN TRANS..COMMIT TRANS控制事務。

+0

要從.net生成一個事務,你可以使用command.Transaction = transaction;或使用交易範圍。 http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx – jean

+0

這不是一個答案是對asnwer的評論,特別是在行「一個SqlCommand不會產生一個自動事務「它並不是爲了你而發佈的,而是爲了OP和任何其他人尋找關於SqlCommand和事務控制的知識 – jean

相關問題