Я обнаружил нечто довольно удивительное, что работает недавно. Я хочу знать, является ли это «правильным» и должно ли оно работать «везде». (поскольку это не просто совпадение, а поддерживается как некий стандарт)
Ну, у меня может быть такой код ...
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)