默认实例的连接字符串,例如命名实例

Ale*_*lex 5 .net sql-server ado.net connection-string database-connection

在我的.NET应用程序中,我将连接到Microsoft SQL Server 2005或2008数据库.用户选择应用程序显示它的实例,然后应用程序应该对此实例执行某些操作.我从注册表中获取实例名称,HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL.

我不知道用户是否选择了默认实例或命名实例(并且Instance Names注册表值中没有此类信息).但是,为了连接到任意实例,我应该使用其中一个

Server=(local)
Run Code Online (Sandbox Code Playgroud)

要么

Server=MSSQLSERVER\instance_name
Run Code Online (Sandbox Code Playgroud)

在我的ADO.NET连接字符串中.我只能使用一个连接字符串模板吗?我尝试将Server = MSSQLSERVER\MSSQL10.MSSQLSERVER用于我的默认SQL Server 2008实例,但连接失败.

Rem*_*anu 11

如果实例名称是MSSQLSERVER,则必须使用类似的模板Server=servername.对于所有其他实例名称,请使用类似的模板Server=servername\instancename.您无法显式指定默认实例名称.

作为旁注,你不应该为此注册.首先,没有记录,并受到任意和未宣布的变更.其次,是不正确的,因为注册表中存在的实例可能没有运行.第三个也是不正确的,因为即使正在运行的实例也可能无法连接,如果SQL浏览器服务不通告它们.

检测现有实例的推荐和支持方法是使用SQL浏览器广播功能,并且可以使用客户端代码来利用它们SmoApplication.EnumAvailableSqlServers.