为什么不能使用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=?;

为什么不能使用SMO连接到SQL Server ?

解决了,这只是另一个忘记RTFM和习惯力量的案例。

基本上,我忘记了构造函数Server(string)接受实例名而不是连接字符串。因此,它试图连接到与我的连接字符串同名的实例。

这是另一个构造函数Server(ServerConnection)所以我应该这样做:

Server = new SMO.Server(
    new ServerConnection(
        new SqlConnectionStringBuilder
        {
            DataSource = ServerName,
            InitialCatalog = DatabaseName,
            IntegratedSecurity = true
        }));

或者更简单地说:

Server = new SMO.Server(ServerName);