为何使用“.”无法连接本地SQL Server?指定实例名却可行
为什么用“.”无法连接本地SQL Server?
这事儿其实很好理解——你本地运行的是SQL Server命名实例,而非默认实例,所以用Server=.这种指向默认实例的写法会找不到服务。
先搞懂默认实例和命名实例的区别:
- 默认实例:安装SQL Server时如果没指定实例名,就会创建默认实例,对应的服务名是
SQL Server (MSSQLSERVER)。连接时可以用Server=.、Server=(local)、Server:1433或者直接你的机器名来连接。 - 命名实例:安装时特意指定了实例名(比如你的
MOJTABA),对应的服务名是SQL Server (MOJTABA)。这种情况下必须明确指定实例名,格式是Server=机器名\实例名,本地连接的话也可以用Server=.\实例名。
你的具体问题:
你安装的是命名实例MOJTABA,而默认实例要么没安装,要么没启动。所以:
- 用
Server=.时,系统会尝试连接本地默认实例,但这个实例根本不存在/没运行,就会抛出你看到的网络连接错误:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
- 而
Server=DESKTOP-7M2F9E2\MOJTABA明确指定了要连接的命名实例,所以能成功建立连接,对应的连接字符串是:
<connectionStrings> <add name="SchoolContext" connectionString="Server=DESKTOP-7M2F9E2\MOJTABA;Database=SchoolContext;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings>
验证方法:
打开Windows的「服务」(按下Win+R输入services.msc回车),找到SQL Server相关服务,你会看到运行中的服务是SQL Server (MOJTABA),而没有SQL Server (MSSQLSERVER)——这就实锤了没有默认实例在运行。
小补充:
如果想用更简洁的写法连接你的命名实例,也可以改成:
<connectionStrings> <add name="SchoolContext" connectionString="Server=.\MOJTABA;Database=SchoolContext;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings>
这个写法和你用完整机器名的连接字符串效果完全一样。
内容的提问来源于stack exchange,提问作者Mojtaba Khooryani
相关产品推荐
相关产品推荐

