Транзакции переносятся после ExecuteNonQuery? - PullRequest
1 голос
/ 22 декабря 2009

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

Ну, у меня может быть такой код ...

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 Ответ

3 голосов
/ 22 декабря 2009

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

также как службы Integration Services выполняют транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...