Проверка состояния NpgsqlTransaction
Хочу сделать откат вносимых в базу данных изменений с предварительной проверкой, что транзакция открыта.
NpgsqlTransaction tr;
if (tr != null)
{
if (tr.Connection != null)
{
tr.Rollback();
tr.Dispose();
}
}
Но если транзакция закрыта, то проверка выдает ошибку
"tr.Connection != null" выдал исключение типа "System.ObjectDisposedException"
на строке
if (tr.Connection != null)
Как можно проверить состояние транзакции?
Ответы (1 шт):
Автор решения: Ingvar
→ Ссылка
как это делаю я:
/// <summary>
/// Подтверждение изменений, внесенных в БД операторами SQL. Работает только тогда, когда предварительно была открыта транзакция.
/// После подтверждения транзакция закрывается.
/// </summary>
public override void Commit()
{
if (db == null) { return; };
if (db.State != ConnectionState.Closed)
{
if ((tr != null) && (tr.Connection != null))
{
tr.Commit();
tr.Dispose();
}
}
}
UPD: в качестве примера:
using (var tr = db.BeginTransaction())
{
try
{
using (var cm = db.GetSQLCommand("SELECT ......."))
{
using (var dr = db.ExecuteReader(cm, tr))
{
while (dr.Read())
{
val += $"'test', ";
}
dr.Close();
}
}
tr.Commit();
}
catch (Exception ex)
{
SplashScreenManager.CloseForm(false);
tr.Rollback();
Logger.log.Log(Logger.GetErrorInfo(ex, db.GetLastSQL()));
ServiceWins.ShowError(ex);
return;
}
}
db.Close();