|
|
|
Зачем объекту DbCommand свойство Transaction?
|
|||
|---|---|---|---|
|
#18+
Зачем объекту DbCommand свойство Transaction? Что будет если не устанавливать данное свойство у DbCommand, если до этого уже был вызван метод DbConnection.BeginTransaction()? void DoSomething(DbConnection con) { DbCommand cmd = con.CreateCommand(); .... // cmd.Transaction = transaction; // Так устанавливать или нет? cmd.ExecuteNonQuery(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 18:58 |
|
||
|
Зачем объекту DbCommand свойство Transaction?
|
|||
|---|---|---|---|
|
#18+
=)) вопрос оч. хороший, сам думаю , зачем. в MSSQL если создать транзакцию (Connection.BeginTransaction), то нужно эту транзакцию передать во все последующиие команды, вплоть до завершения. Иначе поймаите эксепшн. а вот в оракле не обязательно, команды и так выполняться в созданной транзакции без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 15:46 |
|
||
|
Зачем объекту DbCommand свойство Transaction?
|
|||
|---|---|---|---|
|
#18+
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 вернет разные данные. В синтаксисе возможно ошибки - не докапывайтесь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 06:50 |
|
||
|
Зачем объекту DbCommand свойство Transaction?
|
|||
|---|---|---|---|
|
#18+
sladkovЗачем объекту DbCommand свойство Transaction? Что будет если не устанавливать данное свойство у DbCommand, если до этого уже был вызван метод DbConnection.BeginTransaction()?DbCommand будет выполняться вне этой транзакции (только и всего, но может так и надо в каком-то конкретном случае?). Чтобы не устанавливать данное свойство явно, можно использовать TransactionScope sladkovcmd1 и cmd2 вернет разные данные.необязательно, зависит от... например, от IsolationLevel(TIL, уровень изолированности транзакции) - ReadUncommitted - "грязное" чтение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 10:45 |
|
||
|
Зачем объекту DbCommand свойство Transaction?
|
|||
|---|---|---|---|
|
#18+
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 вернет разные данные. В синтаксисе возможно ошибки - не докапывайтесь) какая база данных используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 14:14 |
|
||
|
Зачем объекту DbCommand свойство Transaction?
|
|||
|---|---|---|---|
|
#18+
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 вернет разные данные. В синтаксисе возможно ошибки - не докапывайтесь) Вообще, думаю, что вы написали неверно. Так как транзакция всегда ассоциирована с соединением на уровне БД. И если я открыл транзакцию в соединении то у меня нет способа выполнить что-то вне этой транзакции (я не рассматриваю сейчас специальные случаи как автономные транзакции в оракле). Поэтому собственно и был задан вопрос, что непонятно зачем указывать транзакцию - если она была уже открыта на БД, то любой запрос, выполняющийся через соединение в котором была открыта транзакция, будет выполняться в ее контексте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2010, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=53&tid=1351092]: |
0ms |
get settings: |
4ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 348ms |

| 0 / 0 |
