为什么不能使用SMO连接到SQL Server ?
本文关键字:SQL Server 连接 SMO 不能 为什么 | 更新日期: 2023-09-27 18:02:03
我有一个使用SQL Server管理对象(SMO)的应用程序,它似乎无法连接到数据库服务器,错误是26号:
在建立到SQL Server的连接时发生了与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名是否正确,SQL Server是否配置为允许远程连接。(provider: SQL Network Interfaces, error: 26 - error locations Server/Instance Specified)
然而,这似乎是唯一不能连接到数据库的东西。使用下面的所有内容连接到数据库没有问题:
- SQL Server Management Studio
- sqlcmd
-
System.Data.SqlClient.SqlConnection
ODBC PowerShell中的SQLPS模块
这是我正在使用的代码,当我试图访问数据库时抛出异常,据我所见,所有值都是它们应该是什么:
Server = new SMO.Server(
new ServerConnection(
new SqlConnectionStringBuilder
{
DataSource = ServerName,
InitialCatalog = DatabaseName,
IntegratedSecurity = true
}.ConnectionString));
Database = Server.Databases[DatabaseName];
我唯一注意到的是,当我运行sqlcmd -L
没有我的SQL Server实例显示。我基本上希望看到这样的内容:
Servers:
SQL2008
SQL2012
SQL2014
SQL2016
但是它说的是:
Servers:
;UID:Login ID=?;PWD:Password=?;Trusted_Connection:Use Integrated Security=?;*APP:AppName=?;*WSID:WorkStation ID=?;
解决了,这只是另一个忘记RTFM和习惯力量的案例。
基本上,我忘记了构造函数Server(string)
接受实例名而不是连接字符串。因此,它试图连接到与我的连接字符串同名的实例。
这是另一个构造函数Server(ServerConnection)
所以我应该这样做:
Server = new SMO.Server(
new ServerConnection(
new SqlConnectionStringBuilder
{
DataSource = ServerName,
InitialCatalog = DatabaseName,
IntegratedSecurity = true
}));
或者更简单地说:
Server = new SMO.Server(ServerName);