.NET FirebirdClient лочатся процедуры
Модератор: kdv
.NET FirebirdClient лочатся процедуры
история такая: используем из шарповского кода firebird версии 2.0.1 через FirebirdClient ADO 2.0 для вызова хранимых процедур, время от времени стали замечать что ibexpert не может перелить какую либо процу ругаясь на lock conflict. путем эксперемента выяснили что это происходит после того как процедура была выполнена FirebirdClient-ом. причем как с явным так и не явным использованием транзакции. кто нибудь сталкивался с этим ? это баг FirebirdClient ?
ну всмысле ALTER PROCEDUREkdv писал(а):"перелить"?
ага, точнее:kdv писал(а):именно "lock conflict" ?
lock conflict on no wait transaction
unsuccessful metadata update
object ... is in use
хм, если транзакцию закоммители, а соединение закрыли то наверно проца должна считаться уже не используемой ?kdv писал(а):у вас прямо во время работы настоятельная потребность альтерить используемые процедуры???
к ошибке приводит уже такое консольное приложение:
Код: Выделить всё
FbConnection cn = new FbConnection("User=SYSDBA;Password=...;Database=...;DataSource=172.17.1.200;Port=3050;Charset=WIN1251");
cn.Open();
FbTransaction tran = cn.BeginTransaction(
FbTransactionOptions.NoWait |
FbTransactionOptions.ReadCommitted |
FbTransactionOptions.RecVersion |
FbTransactionOptions.Read |
FbTransactionOptions.Write);
try
{
FbCommand cmd = new FbCommand("NEW_PROCEDURE", cn, tran);
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
tran.Commit();
}
catch
{
tran.Rollback();
}
cn.Close();
Console.ReadKey();
это, так-то процесс разработки и тестирования идет паралелльно, в процах попадаются баги либо нужны какие-то модификации - и их приходится изменять, перезагружать каждый раз IIS, а то и саму базу, что бы завершить какую-то непонятную транзакцию утомляет.WildSery писал(а):А в следующий раз она уже не нужна, нужна другая?
Зачем тогда процедура?
ты бы посмотрел вначале код, который я привел парой постов выше. я ведь не жалуюсь, что firebird запретит переливку процы которая юзается в незакомиченной транзакции, речь-то про то, что невозможно перелить даже когда все использующие транзакции завершены, а сам процесс еще нет.WildSery писал(а):А то, что у тебя один клиент работает со старой процедурой, второй уже с новой - пофиг?
транзакции тут ни при чем. вопрос в "открытости" коннекта, в котором вызывалась конкретная процедура. Кроме того, драйвер может самостоятельно удерживать коннект открытым некоторое время, чтобы не закрывать-открывать его лишний раз - это зависит от архитектуры драйвера и его настроек.даже когда все использующие транзакции завершены, а сам процесс еще нет.