Я обнаружил что-то довольно удивительное, что работает недавно. Я хочу знать, является ли оно «правильным», и если оно должно работать «повсюду». (Как, это не просто совпадение, и это поддерживается как некий стандарт)Выполнение транзакций после 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)
По какой причине вы не можете использовать connection.BeginTransaction() и Commit() в результате IDbTransaction? Или это академический вопрос? –
Если бы я просто использовал 'SqlCommand', это было бы хорошо. Однако для универсальной 'IDbCommand' нет такой вещи, как' BeginTransaction' и 'Commit' – Earlz
Хорошо, что вы оба. Эй, Мэтт. Я только что читал некоторые из ваших ответов WPF, и они кажутся действительно хорошими. Так держать. –