2009-09-09 109 views
1

我有一个简单的代码使用BeginTransaction()。生成的事务分配给我用于某些sql命令的连接。BeginTransaction not calling BEGIN TRANSACTION

当我剖析生成的sql时,我在任何时候都看不到BEGIN TRANSACTION。可能会发生什么情况会阻止交易被使用?

+0

您是否真的测试过该交易是否运行,即使它没有显示在Profiler中(正如Philippe表示它不会) – Jayden 2009-09-09 19:57:09

回答

1

使用ADO.NET时,事务处理的级别较低。没有“BEGIN TRANSACTION”语句发送到服务器。

+0

好吧,它是如何工作的?如果我不会看到BEGIN/COMMIT/ROLLBACK事务命令,我应该看到什么? – ilivewithian 2009-09-09 10:18:23

0

您需要确保您不仅在连接对象上设置事务,还需要将事务分配到sqlCommand。

请参阅this codeproject文章的例子。

+0

这就是我已经在做的,这就是为什么我有点困惑。 – ilivewithian 2009-09-09 10:17:27

0

重申菲利普的说法:

交易都使用ADO.NET时,在较低的水平处理。没有“BEGIN TRANSACTION”语句发送到服务器。

在某些时候,SQL必须转换为实际的调用。大多数ADO.NET(所有我曾经使用过的)经常发送数据库特定的命令到BEGIN,COMMIT和ROLLBACK事务,因为发送ASCII(或其他任何东西)效率会比服务器要低解析

这就是为什么发送参数化查询通常比纯粹基于SQL的查询更快的原因,因为库可以发送特定的命令,从而导致分析更少并且可能更少的数据验证(?)。

HTH!

相关问题