【发布时间】:2010-02-15 12:32:48
【问题描述】:
在禁用 sql server 浏览器的情况下,如何使用共享内存协议连接 sql server 的命名实例来创建有效的连接字符串?
【问题讨论】:
标签: sql-server sql-server-2005 sql-server-2008 ado.net connection-string
在禁用 sql server 浏览器的情况下,如何使用共享内存协议连接 sql server 的命名实例来创建有效的连接字符串?
【问题讨论】:
标签: sql-server sql-server-2005 sql-server-2008 ado.net connection-string
我在使用 ADO 通过共享内存访问 SQL Server 的 C++ 应用程序中创建连接字符串时使用的连接字符串格式如下。
"Provider=MSDASQL;DRIVER={SQL Server};SERVER=lpc:(local);DATABASE=%s;UID=; Password=;"
SERVER= 值中的lpc: 强制服务器连接使用共享内存协议。 %s 用于将具体的数据库名称放入由该格式生成的实际控制字符串中。
【讨论】:
如果您在本地机器上使用 [servername][instance name]、(local)[instance name] 或 LOCALHOST[instance name],只要启用共享内存,它将使用共享内存(在UI 在 2005 年和 2008 年是不同的,所以我不知道我应该支持哪个版本)。 与 SQLCMD 等不同,没有办法告诉提供者您只想使用共享内存 - 如果由于某种原因它不能使用共享内存,它将默认使用不同的协议(命名管道或 TCP/IP)。您可以通过查看 sys.dm_exec_connections 来检查正在使用的协议:
SELECT session_id, net_transport
FROM sys.dm_exec_connections;
我没有在关闭 SQL 浏览器的情况下对此进行测试,但我认为这不会有任何影响。 FWIW,我总是使用 TCP/IP,但我几乎总是避免在本地计算机上安装需要连接到 SQL Server 的应用程序 - 这是低规格应用程序服务器的用途,而不是占用数据库服务器上的内存和 CPU (因此远离 SQL Server)。
【讨论】: