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

时间:2016-08-12 10:40:05

标签: c# sql-server smo

我有一个使用SQL Server管理对象(SMO)的应用程序似乎无法连接到数据库服务器,错误是26号:

  

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)

然而,这似乎是唯一无法连接到数据库的东西。使用以下所有内容连接到数据库可以顺​​利运行:

  • 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=?;

1 个答案:

答案 0 :(得分:0)

解决了,只是忘记了RTFM和习惯的另一种情况。

基本上,我忘记了构造函数Server(string)采用实例名称而不是连接字符串。所以它试图连接到一个与我的连接字符串同名的实例。

还有另一个构造函数Server(ServerConnection)所以我应该做的就是:

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

或者很简单,这个:

Server = new SMO.Server(ServerName);