using (TransactionScope ts = new TransactionScope())
{
SqlConnection connection = new System.Data.SqlClient.SqlConnection();
connection.ConnectionString= "Data Source=win2003;Initial Catalog=DesignStudioDB;Persist Security Info=True;User ID=dstest;Password=dstest";
connection.Open();
....
}
при открытии connection выдает ошибку
"The transaction has already been implicitly or explicitly committed or aborted"
использую ms sql 2000, который стоит на 2003 винде
клиент на ХР, домена нет
уже на сервере в реестре ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
"TurnOffRpcSecurity"
ставил в 1, но непомагает
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, voloha, Вы писали:
GZ>Проверь чтобы транзакция не была вложена. У тебя кроме нее еще открытия коннекта есть?
нет коннект открывается только один раз.
а насчет транзакции я несовсем понял.
о какой транзакции идет речь если я просто открываю коннект?
Здравствуйте, voloha, Вы писали:
V>нет коннект открывается только один раз.
Это хорошо. Значит MSDTS не причем. В случае открытия второго коннекта в пределах TransactionScope, транзакция становится распределенной, и регистрируется в MSDTS. V>а насчет транзакции я несовсем понял. V>о какой транзакции идет речь если я просто открываю коннект?
TransactionScope открывает транзакцию. Любой открытый коннект присоединяется к данной транзакции.
Вообще получить такой exception легко.
1. Попробуй увеличить время timeout транзакции в конструкторе TransactionScope.
2. Проверь, существует ли транзакция перед входом в TransactionScope (свойство Transaction.Current должно быть null).
3. Проверь что ты вызываешь метод TransactionScope перед завершением транзакции
проблема решилась — отключил проверку подлинности для MSDTC на обоих компах
но хотелось бы уточнить вот что
V>>нет коннект открывается только один раз. GZ>Это хорошо. Значит MSDTS не причем. В случае открытия второго коннекта в пределах TransactionScope, транзакция становится распределенной, и регистрируется в MSDTS.
почему после connection.Open() я вижу эту транзакцию в
Службы компонентов/Компьютеры/Мой компьютер/координатор растределенных транзакций/Список транзакций
ведь получается что транзакция еще нераспределенная?
Здравствуйте, voloha, Вы писали:
V>почему после connection.Open() я вижу эту транзакцию в V>Службы компонентов/Компьютеры/Мой компьютер/координатор растределенных транзакций/Список транзакций V>ведь получается что транзакция еще нераспределенная?
Транзакция не распределена пока нет двух менеджеров ресурсов с поддержкой отката(durable у них прозывается), либо менеджер транзакций не поддерживает promoting (то бишь как раз начало распределенной транзакции только после появления второго durable ресурса). SqlClient поддерживает promoting. Проверь, была ли открыта транзакция до того как вошел в TransactionScope(статическое св-во Transaction.Current).
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, voloha, Вы писали:
V>>почему после connection.Open() я вижу эту транзакцию в V>>Службы компонентов/Компьютеры/Мой компьютер/координатор растределенных транзакций/Список транзакций V>>ведь получается что транзакция еще нераспределенная? GZ>Транзакция не распределена пока нет двух менеджеров ресурсов с поддержкой отката(durable у них прозывается), либо менеджер транзакций не поддерживает promoting (то бишь как раз начало распределенной транзакции только после появления второго durable ресурса). SqlClient поддерживает promoting. Проверь, была ли открыта транзакция до того как вошел в TransactionScope(статическое св-во Transaction.Current).
св-во Transaction.Current равно null
когда вхожу в TransactionScope тоже null
только после connection.Open() там чтото появляется
и здесь Службы компонентов/Компьютеры/Мой компьютер/координатор растределенных транзакций/Список транзакций
тоже появляется. почему я ее здесь вижу если она не распределенная еще?
Здравствуйте, voloha, Вы писали:
V>св-во Transaction.Current равно null V>когда вхожу в TransactionScope тоже null V>только после connection.Open() там чтото появляется V>и здесь Службы компонентов/Компьютеры/Мой компьютер/координатор растределенных транзакций/Список транзакций V>тоже появляется. почему я ее здесь вижу если она не распределенная еще?
If the first connection in the transaction scope is a SQL Server 2005 database, then the transaction is lightweight but can be delegated for promotion. When the subsequent database connections are opened, the transaction is promoted to a distributed transaction. However, if the first connection is opened against a SQL Server 2000 or Oracle database, note that the transaction won't be promoted because the resource managers for those databases do not support delegated transactions at this time. Therefore when the first connection's database does not support the delegated promotion of transactions, the transaction is created as a full, distributed transaction instead.
GZ>If the first connection in the transaction scope is a SQL Server 2005 database, then the transaction is lightweight but can be delegated for promotion. When the subsequent database connections are opened, the transaction is promoted to a distributed transaction. However, if the first connection is opened against a SQL Server 2000 or Oracle database, note that the transaction won't be promoted because the resource managers for those databases do not support delegated transactions at this time. Therefore when the first connection's database does not support the delegated promotion of transactions, the transaction is created as a full, distributed transaction instead.
GZ>здесь
GZ>Сам удивлен. Запускаюсь только с MSSQL 2005, посему и не заметил.