C# 在静态void中声明DB连接-连接池会持久吗?

C# 在静态void中声明DB连接-连接池会持久吗?,c#,sql,connection-pooling,C#,Sql,Connection Pooling,我有一个多线程服务器,它使用一个MSSQL,每个客户端都应该可以访问它。我想使用连接池,我也在使用: public static void DBconn() { SqlConnection pripojeni = new SqlConnection(); pripojeni.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=XY

我有一个多线程服务器,它使用一个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”,该对象是否会在内存中持久化(不是对象本身,而是打开的连接)?或者在完成这个方法后它会消失吗?谢谢

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

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


希望有帮助

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

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


希望有帮助

由于您在此方法中新声明了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的观点,如果你一直保持连接打开,你会阻塞数据库,每次打开和关闭都(几乎总是)要好得多。

因为你在这个方法中新声明了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的观点,如果你一直保持连接打开,你会阻塞数据库,每次打开和关闭都(几乎总是)要好得多。

OP代码示例中没有涉及构造函数(你可以从
public
关键字看出)。OP代码示例中没有涉及构造函数(你可以通过
public
关键字来判断)。但到目前为止,我在建立新连接时经历了一些“滞后”:(连接池将保持连接打开,但在多线程应用程序中使用一个SqlConnection对象将不起作用我很抱歉,Tomas,连接池意味着您不应该出现这种延迟。您仍然应该每次或每组查询都创建并使用一个新的连接对象。打开的连接可以通过网络e关闭错误等。使用静态连接很容易出错。不使用静态连接的另一种情况是事务。但到目前为止,我在建立新连接时遇到了一些“滞后”:(连接池将保持连接打开,但在多线程应用程序中使用一个SqlConnection对象将不起作用我很抱歉,Tomas,连接池意味着您不应该出现这种延迟。您仍然应该每次或每组查询都创建并使用一个新的连接对象。打开的连接可以通过网络e关闭错误等。使用静态连接很容易出错。不使用静态连接的另一种情况是事务。