|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
QueryAnalizer тоже обычная программа, которая написана толи с применением ADO, толи с ODBC. ВВодим в ней строку запроса с серверной транзакцией, и все OK. Как в ней это реализовано? Мы ведь не можем через ADO.NET выполнить запрос с серверной транзакцией, а только с клиентской. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2004, 08:15 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
М.б. какие-то хитрости майкрософтовские, а лучше об этом спросить в ГФ. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2004, 09:31 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
В принципе транзакция всегда серверная, начать ее можно либо написав соотв. TSQL и отправив его саморучно на выполнение, либо вызвав некий метод класса или API функцию, который отправит тот же begin transaction на выполнение. Поэтому в свойство CommandText SqlCommand'а пишем "begin transaction .......... и т. д." и вперед ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2004, 09:43 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
KilroyВ принципе транзакция всегда серверная, начать ее можно либо написав соотв. TSQL и отправив его саморучно на выполнение, либо вызвав некий метод класса или API функцию, который отправит тот же begin transaction на выполнение. Поэтому в свойство CommandText SqlCommand'а пишем "begin transaction .......... и т. д." и вперед Так получится использовать только BEGIN TRAN и COMMIT TRAN, мы не сможем использовать болле сложные транзакции. Т.е. так можно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
А какой смысл использовать транзакцию T-SQL, если ты не можешь в коде T-SQL ее откатить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 01:05 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
НЕ СКАЖУ IF @@ERROR<>0 ROLLBACK TRAN COMMIT TRAN Вот тут-то собака и порылась. Если @@ERROR <> 0, то у тебя последовательно должны выполниться и rollback, и commit. То есть транзакция сначала откатывается (и заканчивается), а потом ты пытаешься ее же закоммитить. Наверное, стоит сделать так: Код: plaintext 1. 2. 3. 4.
Таким образом, если ошибка - rollback, иначе - commit, транзакция будет завершена только 1 раз и ошибки должны пропасть. Сергей ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 11:09 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
ошибки уровня 11 и выше будут вызывать SqlException. нужно еще дополнительно использовать try-catch. ошибки уровня выше 19 приводят к закрытию соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 13:12 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
Ясно, в чем ошибка. кузяошибки уровня 11 и выше будут вызывать SqlException. нужно еще дополнительно использовать try-catch. ошибки уровня выше 19 приводят к закрытию соединения. Про какие уровни ты говоришь? Да, и хочется понять в чем разница между клиентской и серверной транзакцией. Может где почитать про это можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 21:52 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
НЕ СКАЖУЯсно, в чем ошибка. кузяошибки уровня 11 и выше будут вызывать SqlException. нужно еще дополнительно использовать try-catch. ошибки уровня выше 19 приводят к закрытию соединения. Про какие уровни ты говоришь? Да, и хочется понять в чем разница между клиентской и серверной транзакцией. Может где почитать про это можно? 1 кузя говорит про error severity в MSSQL (читайте BOL Error Message Severity Levels) 2 Серверная транзакция: для MSSQL Server-а существует только одно понятие транзакции: то, что находится, между командами BEGIN TRAN... END TRAN (ROLLBACK TRAN) Понятие IMPLICIT TRANSACTIONS для простоты опустим. В BOL подробно описана работа с транзакциями (см. Controlling Transactions) 3 "Клиентская транзакция": то, что подразумевается под "клиентской транзакцией" может включать в себя все, что угодно и зависит от реализации клиента. Откат/подтверждение состояния каких-то объектов, запись в файл, информирование пользователя и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 22:18 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
немного дополню п.3 Alexey Kudinov для "клиентских" транзакций выполняется, как правило два доп. батча на trans=conn.BeginTransaction(); Код: plaintext
и на trans.Commit(); Код: plaintext
Код: plaintext
в этом случае тебе дается возможность на клиенте проанализировать результат (сделать обработку данных "привычными" средствыми) выполнения операций, которые ты включаешь в транзакцию, в совокупности с другими данными своей программы и принять решение на Commit или Rollback транзакции. это более гибкое управление, т.к. есть возможность чисто программно выполнять различные последовательности запросов в рамках одной транзакции и принимать решения по совокупности данных, связанных не только с SQL сервером, но и другими данными. --- если принятие решений делается по принципу - была ошибка, то откатить транзакцию (как в твоем примере) - в этом случае проще и быстрее выполнить "серверную" транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 23:24 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
Alexey Kudinov 3 "Клиентская транзакция": то, что подразумевается под "клиентской транзакцией" может включать в себя все, что угодно и зависит от реализации клиента. Откат/подтверждение состояния каких-то объектов, запись в файл, информирование пользователя и т.п. Как она(клиентская транзакция) работает? Я где-то читал(не помню про какие транзакции), что создается контекст(объект) на каждую операцию, потом, если что-то случается, то все объекты откатываются. Это тот случай? Или в ADO.NET это совсем по другому? Или клиентские транзакции на клиенте ADO.NET тоже самое тоже самое, что и серверные? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 23:24 |
|
ADO.NET, транзакции и QueryAnalizer
|
|||
---|---|---|---|
#18+
НЕ СКАЖУ... создается контекст(объект) на каждую операцию, потом, если что-то случается, то все объекты откатываются. Это тот случай?это случай Distributed Transaction c ними можно работать в ES или с использованием ServiceDomain (Win2k3, XP SP2). для framework 2.0 поддержка распределенных транзакций доступна через TransactionScope класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2004, 00:04 |
|
|
start [/forum/topic.php?fid=17&fpage=124&tid=1353953]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 327ms |
total: | 473ms |
0 / 0 |