连接到SQL Server 2000和SQL Server 2008的ADO.Net事务的区别

时间:2010-03-03 12:46:47

标签: sql-server-2008 ado.net transactions sql-server-2000

我有一些C#/ ado.net代码,它们与SQL Server 2000和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();

和sp代码:

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

连接到SQL Server 2008时,C#代码将在'trans.Commit()'中失败,并且异常说明:事务已被提交,无法再次使用。

但是连接到SQL Server 2000,它会成功。请告诉我为什么?

1 个答案:

答案 0 :(得分:0)

我不确定,但我想sp在sql server 2008中提交事务,并且不能提交两次。