2009-09-09 108 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!

相關問題