我知道之前在 SO 上也有类似的问题,如此处所示但是 ,这个答案确实没有解决我的问题。这是我的场景,我将使用 PowerShell 对其进行演示。
以下代码将在我的本地 sql2016 实例上创建两个会话
#The only difference in the two connection strings is [pooling] property, the $connstr_1 has pooling=true, while the $connstr_2 has pooling=false.
$connstr_1 = "data source=localhost\sql2016; initial catalog=master; trusted_connection=true; app=ConnPoolTest; pooling=true";
$SqlConnection1 = New-Object System.Data.SqlClient.SqlConnection($connstr_1)
$connstr_2 = "data source=localhost\sql2016; initial catalog=master; trusted_connection=true; app=ConnPoolTest; pooling=false";
$SqlConnection2 = New-Object System.Data.SqlClient.SqlConnection($connstr_2)
$SqlConnection1.Open()
$SqlConnection2.Open();
我的问题是在 sql server 端,我怎么知道哪个会话的连接字符串的池属性设置为true
,哪个设置为false
?
你通常不会也不能。连接字符串不会发送到 SQL Server,它是驱动程序的指令,指示驱动程序需要哪些信息和选项才能进行连接,以及在某些情况下应如何操作。但是,连接字符串本身不会发送到 SQL Server,通常不可能仅从 SQL Server 显示的信息中完整地重建它。
在您的示例中,池选项告诉驱动程序是否使用连接池。SQL Server 不关心这个,它也不知道这个,因为它完全是一个驱动程序/应用程序构造。