2010-03-03 7 views
0

J'ai un code C#/ado.net qui agit différemment avec SQL Server 2000 et SQL Server 2008.Différence de transaction de ADO.Net connexion à SQL Server 2000 et SQL Server 2008

SqlConnection con = new SqlConnection("connecstionstring"); 
SqlCommand cmd = con.CreateCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "MySp"; 
con.Open(); 
SqlTransaction trans = con.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.ExecuteNonQuery(); 
trans.Commit();// this step will fail with sql server 2008 but success with 2000 
con.Close(); 

et le code sp comme:

ALTER PROCEDURE MySp 
AS 
BEGIN 
    COMMIT --this match the outside 'begin trans' in c# code 
    do some thing... 
    BEGIN TRANSACTION -- this match the outside 'commit' in c# code 
END 

lors de la connexion à SQL Server 2008, le code C# échouera à 'trans.Commit(), et l'exception dit: la transaction a été commis, ne peut pas utiliser à nouveau.

Mais la connexion à SQL Server 2000, il réussira. S'il vous plaît dites-moi pourquoi?

Répondre

0

Je ne suis pas sûr, mais je suppose que le sp valide la transaction dans SQL Server 2008, et il ne peut pas être commité deux fois.

Questions connexes