![](/img/trans.png)
[英]C# Transactionscope - insert/select in same transaction, multiple connections
[英]Multiple connections to the same DB in the same TransactionScope
當我們為 C# 中的每個語句打開關閉連接時,如何在單個事務中處理連接?
該場景使用相同的連接字符串,並且連接打開和關閉多種類型,每個語句一次。
考慮以下示例
void updateSomething() {
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// Execute the statements
connection.Close();
}
}
當我執行以下代碼時:
void SomeMethod()
{
using(TransactionScope scope = new TransactionScope())
{
for(int i=0; i < 10; i++)
{
this.updateSomething();
}
scope.Complete();
}
}
建議對每個語句使用連接打開/關閉。 那是因為我們實際上並沒有創建連接,我們只是使用池中的一個。
為什么會這樣? 我知道我們保持連接的時間越短越好,但問題是在大多數交易中,我們將在下一個語句的下一刻得到它。
如果存在一些這樣的語句,是否只是為了避免語句之間要求的代碼計算時間(它不應該因為它會將數據庫鎖定在事務 state 中所需的時間更長)。
在事務期間保持一個連接打開是否有意義?
建議對每個語句使用連接打開/關閉。
如果沒有在上下文中看到該評論,我猜這個建議是因為您所說的:創建和銷毀SqlConnection
對象並不意味着您正在創建和銷毀網絡連接。
我認為“為每個語句使用一個”背后的動機是不要擔心在創建SqlConnection
對象時嘗試提高效率。 不要讓 go 讓一個人活着,並在整個代碼中傳遞它,以為您正在避免斷開網絡連接。 沒有意義。
在您的示例中,它不會真正有所作為。 如果您願意,可以對每個查詢使用相同的SqlConnection
object,只要您按順序而不是並行進行。 由於您節省了創建SqlConnection
object 的計算時間,因此效率可能會更高一些。 但是,節省的時間可能甚至不會被注意到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.