簡體   English   中英

如何從asmx Web服務管理多個ado.net數據庫連接

[英]how to manage multiple ado.net database connections from asmx Web Service

由於IIS為每個請求分配了一個工作線程,因此我打算創建一個新對象來服務每個請求。 我有兩個問題:

  1. 創建新對象來滿足每個請求是否有效? (是否還有替代品?)

  2. 創建新的連接,並針對每個請求打開和關閉它,如下所示是線程安全,高效和最佳實踐:

using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString))
{ 
    conn.Open();
    MySqlCommand cmd = new MySqlCommand("SELECT password FROM Admin WHERE username='" + username + "'", conn);
    object dbp = cmd.ExecuteScalar();
    conn.Close();
}

PS。 此示例取自該站點。 我使用oracle db。

謝謝:馬蒂

當您執行new SomeSqlConnection() ,實際上並不是每次都創建一個新的連接。 由於數據庫連接的創建成本很高,因此ADO.NET保留了一個連接池並從那里繪制連接。 您也可以刪除對Close方法的調用。 您可以在每個請求中安全使用以下代碼段:

var connectionString = ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString;
using (var conn = new MySqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{ 
    conn.Open();
    cmd.CommandText = "SELECT count(*) from some_table";
    object result = cmd.ExecuteScalar();
}

正如Darin在其答案中正確指出的那樣,您應該允許連接池機制完成其工作。 不要嘗試構建一些“聰明”的東西,它不會那么好。

使用數據庫連接等昂貴資源的黃金法則是延遲獲取並提前發布。 只要您遵守該規定,您就可以做到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM