首页 文章

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

提问于
浏览
3

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

谢谢:马蒂

2 回答

  • 0

    正如Darin在his answer中正确陈述的那样,您应该允许连接池机制完成其工作 . 唐't try and build something '聪明', it won' t一样好 .

    具有数据库连接等昂贵资源的黄金法则是获得较晚并及早发布 . 只要你遵守那个,你就会做得很好 .

  • 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();
    }
    

相关问题