powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зачем объекту DbCommand свойство Transaction?
6 сообщений из 6, страница 1 из 1
Зачем объекту DbCommand свойство Transaction?
    #36819845
sladkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем объекту DbCommand свойство Transaction?

Что будет если не устанавливать данное свойство у DbCommand, если до этого уже был вызван метод DbConnection.BeginTransaction()?

void DoSomething(DbConnection con) {
DbCommand cmd = con.CreateCommand();
....
// cmd.Transaction = transaction; // Так устанавливать или нет?
cmd.ExecuteNonQuery();
}
...
Рейтинг: 0 / 0
Зачем объекту DbCommand свойство Transaction?
    #36821524
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=))
вопрос оч. хороший, сам думаю , зачем.

в MSSQL если создать транзакцию (Connection.BeginTransaction), то нужно эту транзакцию передать во все последующиие команды, вплоть до завершения. Иначе поймаите эксепшн.

а вот в оракле не обязательно, команды и так выполняться в созданной транзакции без проблем.
...
Рейтинг: 0 / 0
Зачем объекту DbCommand свойство Transaction?
    #36835013
sibkit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
using (IDbTransaction tx = _connection.BeginTransaction())
{
IDbCommand updateCommand = _connection.CreateCommand();
updateCommand.Transaction = tx;
updateCommand.CommandText = "update table set column=3";
updateCommand.ExecuteNonQuery();

IDbCommand cmd1 = _connection.CreateCommand();
cmd1.CommandText = "select * from table";

IDbCommand cmd2 = _connection.CreateCommand();
cmd2.Transaction = tx;
cmd2.CommandText = "select * from table";



}

cmd1 и cmd2 вернет разные данные. В синтаксисе возможно ошибки - не докапывайтесь)
...
Рейтинг: 0 / 0
Зачем объекту DbCommand свойство Transaction?
    #36835294
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sladkovЗачем объекту DbCommand свойство Transaction?

Что будет если не устанавливать данное свойство у DbCommand, если до этого уже был вызван метод DbConnection.BeginTransaction()?DbCommand будет выполняться вне этой транзакции (только и всего, но может так и надо в каком-то конкретном случае?).
Чтобы не устанавливать данное свойство явно, можно использовать TransactionScope

sladkovcmd1 и cmd2 вернет разные данные.необязательно, зависит от... например, от IsolationLevel(TIL, уровень изолированности транзакции) - ReadUncommitted - "грязное" чтение
...
Рейтинг: 0 / 0
Зачем объекту DbCommand свойство Transaction?
    #36835959
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sibkitusing (IDbTransaction tx = _connection.BeginTransaction())
{
IDbCommand updateCommand = _connection.CreateCommand();
updateCommand.Transaction = tx;
updateCommand.CommandText = "update table set column=3";
updateCommand.ExecuteNonQuery();

IDbCommand cmd1 = _connection.CreateCommand();
cmd1.CommandText = "select * from table";

IDbCommand cmd2 = _connection.CreateCommand();
cmd2.Transaction = tx;
cmd2.CommandText = "select * from table";



}

cmd1 и cmd2 вернет разные данные. В синтаксисе возможно ошибки - не докапывайтесь)

какая база данных используется?
...
Рейтинг: 0 / 0
Зачем объекту DbCommand свойство Transaction?
    #36844096
sladkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sibkitusing (IDbTransaction tx = _connection.BeginTransaction())
{
IDbCommand updateCommand = _connection.CreateCommand();
updateCommand.Transaction = tx;
updateCommand.CommandText = "update table set column=3";
updateCommand.ExecuteNonQuery();

IDbCommand cmd1 = _connection.CreateCommand();
cmd1.CommandText = "select * from table";

IDbCommand cmd2 = _connection.CreateCommand();
cmd2.Transaction = tx;
cmd2.CommandText = "select * from table";



}

cmd1 и cmd2 вернет разные данные. В синтаксисе возможно ошибки - не докапывайтесь)

Вообще, думаю, что вы написали неверно. Так как транзакция всегда ассоциирована с соединением на уровне БД. И если я открыл транзакцию в соединении то у меня нет способа выполнить что-то вне этой транзакции (я не рассматриваю сейчас специальные случаи как автономные транзакции в оракле). Поэтому собственно и был задан вопрос, что непонятно зачем указывать транзакцию - если она была уже открыта на БД, то любой запрос, выполняющийся через соединение в котором была открыта транзакция, будет выполняться в ее контексте.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зачем объекту DbCommand свойство Transaction?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]