Разница между транзакцией ADO.Net и подключением к SQL Server 2000 и SQL Server 2008 - PullRequest
0 голосов
/ 03 марта 2010

У меня есть некоторый код на 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 голосов
/ 03 марта 2010

Я не уверен, но я полагаю, что sp фиксирует транзакцию в SQL Server 2008, и он не может быть зафиксирован дважды.

...