关于c#:如何从asmx Web Service管理多个ado.net数据库连接

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

由于IIS为每个请求分配一个工作线程,我打算创建新对象来为每个请求提供服务。 我有两个问题:

  • 创建新对象以服务每个请求是否有效? (甚至还有替代?)

  • 它是创建新连接的线程安全,高效和最佳实践,并为每个请求打开和关闭它,如下所示:

  • 1
    2
    3
    4
    5
    6
    7
    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方法的调用。 这是您可以在每个请求中安全使用的代码段:

    1
    2
    3
    4
    5
    6
    7
    8
    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在答案中正确指出的那样,您应该允许连接池机制完成其工作。 不要试图建立一些"聪明"的东西,它不会那么好。

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