默认实例的连接字符串和命名实例的连接字符串有何不同?

5
在我的.NET应用程序中,我连接到Microsoft SQL Server 2005或2008数据库。用户选择应用程序显示的实例,然后应用程序应该对此实例执行某些操作。我从注册表HKLM\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL中获取实例名称。
我不知道用户是否选择了默认实例或命名实例(在实例名称注册表值中也没有这样的信息)。但是,为了连接到任意实例,我应该使用以下内容:
Server=(local)

或者

Server=MSSQLSERVER\instance_name

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

2个回答

12
如果实例名称为MSSQLSERVER,则必须使用类似于Server=servername的模板。对于所有其他实例名称,请使用类似于Server=servername\instancename的模板。您不能显式指定默认实例名称。
顺便提一下,您不应该窥视注册表。首先,这是未经记录的,并且可能会随意更改而没有通知。其次,它是错误的,因为在注册表中存在的实例可能没有运行。第三个问题仍然不正确,因为即使正在运行的实例也可能无法连接,如果SQL Browser服务没有广告它们。
检测现有实例的推荐和支持方式是使用SQL Browser广播功能,并且可以通过使用SmoApplication.EnumAvailableSqlServers从客户端代码中利用它们。

感谢您详细的回答。我有2008 Server Express,但我的默认实例不是MSSQLSERVER,而是MSSQL10.MSSQLSERVER。我该怎么办? - Alex
实例名称是MSSQLSERVER。你列出的不是实例名称,而是实例,我不会解释那是什么,因为你应该使用支持的方式(SMO)来代替。 - Remus Rusanu
谢谢您几年前的回答。这个有文档记录吗? - Jesse Seger

0

你应该使用 Server=servername\instance_name 或者 Server=address\instance_name


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接