Один connection и множество транзакций

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
ARM
Сообщения: 26
Зарегистрирован: 02 дек 2006, 13:27

Один connection и множество транзакций

Сообщение ARM » 06 дек 2006, 10:36

Давно прочитал в статье уважаемого Дмитрия о транзакциях, что "Собственно, IB обладает возможностью в одном коннекте стартовать много транзакций, что очень удобно". Эти ньансы при юзанию ФБ в Билдере уже не помню, но в .NET + FB Net Provider 2.0 при старте второй транзакции для коннекшена, вываливается исключение, что транзакция уже активна.
ВОПРОС: Это такая "фича" .NET Provider`а или статья уже устарела ?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 06 дек 2006, 11:18

Статья не устарела. Фактически, стандарт работы с базой, когда на одном коннекте много транзакций.
Объектов "транзакция" несколько должно быть, а не стартоваться несколько раз одна.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 дек 2006, 11:48

ВОПРОС: Это такая "фича" .NET Provider`а или статья уже устарела ?
у BDE одна транзакция на коннект. у ODBC тоже. У JDBC - другая система управления транзакциями, совершенно. у .Net Provider - не знаю.

С одной стороны есть функциональность IB/FB, которая разумеется не ухудшается. А с другой стороны - драйвер, который должен подчиняться заданной архитектуре. Если драйверы такого типа МОГУТ стартовать несколько транзакций в одном коннекте - значит и этот тоже может, если его разработчик сделал это. Если не могут - то разработчик конкретного драйвера, понятно, ничего выше имеющегося функционала сделать не может.

Так что реально весь вопрос можно свести к следующему -
"Поддерживает ли .Net Provider несколько транзакций на коннект, и в каком интерфейсе".

ARM
Сообщения: 26
Зарегистрирован: 02 дек 2006, 13:27

Сообщение ARM » 06 дек 2006, 11:57

Сейчас посмотрел, транзакцию никаким другим способом создать, кроме как через Connection.BeginTransaction() нельзя. При попытке получить ДРУГУЮ транзакцию через этот BeginTransaction() валится эксепшен, что транз. активна, что говорит о том, что эта "фича" (1 connection - 1 транзакция) провайдера, что есть бэд.
Спасибо всем, пошел ковырятся в исходниках.

Ответить