如何从asmx Web Service管理多个ado.net数据库连接

cha*_*r m 3 c# iis ado.net asmx

由于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.

谢谢:马蒂

Dar*_*rov 8

当你这样做时,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();
}
Run Code Online (Sandbox Code Playgroud)