在静态void中声明DB连接 - 连接池是否会持续存在?

时间:2010-07-13 07:46:23

标签: c# sql connection-pooling

我有一个多线程服务器,它使用一个MSSQL,每个客户端都应该有权访问。我想使用连接池,我也在使用它:

public static void DBconn()
        {
                SqlConnection pripojeni = new SqlConnection();
                pripojeni.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=XYZ;Trusted_Connection=True;Min Pool Size=20";

        }

如果连接字符串表示“min pool”,对象是否会持久存储在内存中(而不是对象本身而不是打开的连接)?或者在完成这种方法后它会消失吗?感谢

2 个答案:

答案 0 :(得分:6)

您应该为每个连接使用新的SqlConnection对象,而不是在静态构造函数中创建一个。当您创建的每个连接使用相同的连接字符串时,连接池都有效(您应该将其存储在配置文件中,如web.config或app.config)。

每次只创建并打开一个SqlConnection对象,记得在最后关闭/处置它,连接池将确保它重新使用现有的开放连接。

希望有所帮助!

答案 1 :(得分:0)

由于您在此方法中新声明了SqlConnection对象,因此在方法结束后它将消失。

试着继续连接:

public static class PerstistendDB
    {
        // Readonly so it can't be destroyed!
        public static readonly System.Data.SqlClient.SqlConnection pripojeni = new System.Data.SqlClient.SqlConnection(
            "Data Source=localhost\\SQLEXPRESS;Initial Catalog=XYZ;Trusted_Connection=True;Min Pool Size=20");
    }

注意:我同意Kieren的意见,如果你一直打开你的连接,你就会堵塞数据库,每次打开和关闭都会(几乎总是)更好。