我聲明一個類級連接似乎是合乎邏輯的,並在Web服務構造函數中初始化它。
不,這似乎不符合邏輯。 ADO.NET使用connection pooling,因此您不需要執行此操作。此連接池是每個應用程序域的每個連接字符串。
所以,你可以簡單地畫從水池中的每個Web方法一個新的連接,並在最後返回到庫(using
報表會照顧這一點):
[WebMethod]
public void Foo()
{
// Here you are NOT creating a new connection to the database
// you are just drawing one from the connection pool
using (var conn = new SqlConnection(SomeConnectionString))
using (var cmd = conn.CreateCommand())
{
// Here you are NOT opening a new connection to the database
conn.Open();
cmd.CommandText = "SELECT id FROM foo";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// do something with the results
}
}
} // Here you are NOT closing the connection, you are just returning it to the pool
}
所以這裏有一個建議:不要嘗試通過使用某些類字段,靜態字段來手動管理連接......將此管理留給ADO.NET,因爲它更好。
備註:我所展示的代碼通常駐留在一個數據訪問層中,該數據訪問層被web方法調用。
感謝達林,但這實際上是我試圖避免,即必須裝飾每個方法與使用{}塊。我瞭解連接池如何工作,我在談論的是減少webservice類中的代碼開銷。由於需要在每個方法中使用連接對象,所以我希望將該聲明放在類級別的一個位置,並使用構造函數/析構函數(這就是我的邏輯意思)。你所描述的是我目前正在使用的,我希望能找到一個更好的方式。 – aaaaaaaaaaaaaaa1111111 2011-02-13 20:39:20