Я запускаю несколько вложений с использованием транзакций. Я использую класс SqlDependency, чтобы сообщить машине клиента, когда сервер был обновлен.Sql Уведомление Поддерживаемые уровни изоляции для транзакций
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вставляю транзакции, независимо от того, какой уровень изоляции я устанавливаю для транзакции, SqlNotificationEventArgs возвращает e.Info как изоляцию, которая указывает, что у меня есть неправильный уровень изоляции, установленный для этих транзакций (Я думаю). Когда я вставляю без использования транзакции, все выполняется гладко.
Мои вопросы: какие поддерживаемые уровни изоляции, если таковые имеются, для транзакций при использовании Sql Notification?
Ниже некоторые из кода, я использую для уведомления:
void DataChanged(object sender, SqlNotificationEventArgs e) {
var i = (ISynchronizeInvoke)_form;
if (i.InvokeRequired) {
var tempDelegate = new OnChangeEventHandler(DataChanged);
object[] args = { sender, e };
i.BeginInvoke(tempDelegate, args);
} else {
var dependency = (SqlDependency)sender;
if (e.Type == SqlNotificationType.Change) {
dependency.OnChange -= DataChanged;
GetData(dependency);
}
}
}
И для сделки:
public void ExecuteNonQueryData(List<string> commandTexts) {
SqlConnection connection = null;
var command = new SqlCommand();
SqlTransaction transaction = null;
try {
connection = new SqlConnection(GetConnectionString());
connection.Open();
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
foreach (var commandText in commandTexts) {
try {
command.Connection = connection;
command.CommandText = commandText;
command.Transaction = transaction;
command.ExecuteNonQuery();
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
transaction.Commit();
} catch (Exception ex) {
Console.WriteLine(ex.Message);
} finally {
command.Dispose();
if (transaction != null) transaction.Dispose();
if (connection != null) {
connection.Close();
connection.Dispose();
}
}
commandTexts.Clear();
}
Edit: я совершал сделку в неправильном месте.