在我的 .NET 应用程序中,我正在连接到 Microsoft SQL Server 2005 或 2008 数据库。用户选择应用程序显示的实例,然后应用程序应该对该实例执行某些操作。我从注册表 HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL 中获取实例名称。
我不知道用户是否选择默认实例或命名实例(实例名称注册表值中没有此类信息)。但是,为了连接到任意实例,我应该使用
Server=(local)
或
Server=MSSQLSERVER\instance_name
在我的 ADO.NET 连接字符串中。我可以只使用一个连接字符串模板吗?我尝试对默认 SQL Server 2008 实例使用 Server=MSSQLSERVER\MSSQL10.MSSQLSERVER,但连接失败。
最佳答案
如果实例名称是 MSSQLSERVER,则必须使用类似 Server=servername
的模板。对于所有其他实例名称,请使用类似 Server=servername\instancename
的模板。您无法显式指定默认实例名称。
顺便说一句,您不应该为此高峰注册表。首先,它是无证的,并且可能会发生任意和未经通知的更改。其次,这是不正确的,因为注册表中存在的实例可能没有运行。第三个也是不正确的,因为如果 SQL Browser 服务不通告它们,即使正在运行的实例也可能无法连接。
建议和支持的检测现有实例的方法是使用 SQL 浏览器广播功能,并且可以通过使用 SmoApplication.EnumAvailableSqlServers
从客户端代码中利用它们。 .
关于.net - 默认实例的连接字符串,例如命名实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449397/