[英]how to manage multiple ado.net database connections from asmx Web Service
由於IIS為每個請求分配了一個工作線程,因此我打算創建一個新對象來服務每個請求。 我有兩個問題:
創建新對象來滿足每個請求是否有效? (是否還有替代品?)
創建新的連接,並針對每個請求打開和關閉它,如下所示是線程安全,高效和最佳實踐:
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.