2009-12-21 2 views
1

Я обнаружил что-то довольно удивительное, что работает недавно. Я хочу знать, является ли оно «правильным», и если оно должно работать «повсюду». (Как, это не просто совпадение, и это поддерживается как некий стандарт)Выполнение транзакций после ExecuteNonQuery?

Ну, я могу иметь такой код ...

IDbCommand cmd=new ....; //this changes depending on if I'm using Sql Server or PostgreSQL 
cmd.Connection=connection; 
cmd.CommandText="begin;" //postgresql keyword to begin a transaction 
cmd.ExecuteNonQuery(); 
cmd.CommandText=... 
cmd.Execute... 
..... 
//later(without changing cmd's connection).. 
cmd.CommandText="commit;"; //postgresql keyword to commit the open transaction. 
cmd.ExecuteNonQuery(); 
connection.Close(); 

Ну, я хотел, если это будет всегда знать Работа. Я был под впечатлением, что каждый запрос в командование только в рамках этой команды, например, что-то вроде этого:

cmd.CommandText="declare @i int;"; //sql server code to create a temporary variable 
cmd.Execute.. 
cmd.CommandText="set @i=0;"; //set the temporary variable to 0 
cmd.Execute... 

Я думал, что это будет не в состоянии что-то вроде @i not declared из-за объема. Так ли это верно, что транзакции различны или зависит от этой базы данных?

(также, извините комментировать ключевые слова и тому подобное. Я хотел, чтобы это отдуваться людьми, знакомыми с только общий SQL)

+1

По какой причине вы не можете использовать connection.BeginTransaction() и Commit() в результате IDbTransaction? Или это академический вопрос? –

+0

Если бы я просто использовал 'SqlCommand', это было бы хорошо. Однако для универсальной 'IDbCommand' нет такой вещи, как' BeginTransaction' и 'Commit' – Earlz

+0

Хорошо, что вы оба. Эй, Мэтт. Я только что читал некоторые из ваших ответов WPF, и они кажутся действительно хорошими. Так держать. –

ответ

3

Да, это просто отлично. Если вы используете одно и то же соединение (а не возвращаете его в пул соединений), то это ожидаемое поведение.

Это также, как услуги Integration Services осуществляют транзакции.

Смежные вопросы