Пытаюсь показать основные проблемы транзакций при помощи двух приложений, но не могу реализовать даже "грязное чтение". Есть кнопка "вывести баланс аккаунтов", которая должна показывать данные на текущем этапе транзакции. Обработка клика на нее выглядит вот так:
new Select(sConn, trans).ShowDialog(); // вызывается новая форма
sConn
и trans
- глобально описанные подключение к БД и транзакция. При создании формы Select выполняется такой код:
private void Select_Load(object sender, EventArgs e)
{
if (sConn.State != ConnectionState.Open)
sConn.Open(); //когда транзакция завершилась, я закрываю соединение,
//поэтому надо его снова открыть
var sCommand = new NpgsqlCommand
{
CommandText = "select * from accounts",
Connection = sConn,
Transaction = trans
};
using (var reader = sCommand.ExecuteReader())
{
while (reader.Read())
{
dataGridView1.Rows.Add((string)reader["login"], ((decimal)reader["balance"]).ToString());
}
}
}
И вот, например, в первом приложении я выполняю такой код:
sConn.Open();
trans = sConn.BeginTransaction(IsolationLevel.ReadUncommitted);
Уровень изоляции - ReadUncommitted, то есть если я сейчас изменю в другой транзакции данные, то я увижу это изменение внутри выше описанной транзакции. Проверяем. В другом приложении выполняю такой код:
sConn.Open();
trans = sConn.BeginTransaction();
sCommand = new NpgsqlCommand
{
Connection = sConn,
CommandText = @"update accounts set balance = balance + cast(1000 as money) where id = 27",
Transaction = trans
};
sCommand.ExecuteNonQuery();
Но! Нажав на кнопку "вывести баланс аккаунтов" из 1 приложения (1 транзакция), я получаю неизмененную информацию. Но ведь изоляция уровня ReadUncommitted. Как сделать так, чтобы 1 приложение увидело изменения?
Никак. Postgresql не поддерживает ReadUncommitted, потому что считается, что такой уровень изоляции не дает преимуществ. https://edu.postgrespro.ru/dev1/dev1_03_arch_mvcc.pdf
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Начал писать Телеграм-бот с использованием webhook и столкнулся с проблемой - при вводе тестовой команды, Telegram постоянно шлет update, даже если не ввожу...
JSON файл содержит поле и три массиваПервые 2 массива описывают данные, последний массив содержит массивы с данными, каждый массив это один...
Нужен метод который будет отслеживать изменения в свойствах другого классаПодскажите, пожалуйста, как можно это реализовать или где об этом...