在ExecuteNonQuery之后进行的事务?

时间:2009-12-21 22:35:17

标签: c# sql ado.net

我发现了最近很有意思的东西。我想知道它是否“正确”,是否应该“无处不在”。 (因为,它不仅仅是一种巧合,而是作为某种标准得到支持)

好吧,我可以拥有这样的代码......

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();

好吧,我想知道这是否会一直有效。我的印象是,Command中的每个查询都只在该命令的范围内,如下所示:

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 个答案:

答案 0 :(得分:3)

是的,这很好。如果您使用相同的连接(而不是将其返回到连接池),那么这是预期的行为。

它也是Integration Services如何进行交易。