尝试连接到远程SQL Server时,方法会触发异常

时间:2015-09-20 15:30:03

标签: c# sql-server ado.net

我想创建一个连接到SQL Server然后列出所有数据库的简单工具,在用户选择其中一个数据库后,该工具将在其上执行一些SQL脚本。

下面是一个应该返回包含我所有数据库的DataTable的方法; 我发送给它sqlServerIp作为第一个参数,如10.10.20.30 ip地址而非服务器名称。

此外,我没有指定SQL Server实例。

  private DataTable GetSqlServerDatabases(String sqlServer, bool isWindowsAuth, String login, String password)
  {
        String connectionString;
        DataTable databases;

        if (isWindowsAuth)
        {
            connectionString = "Data Source=" + sqlServer + ",1433;Network Library=DBMSSOCN; Integrated Security=True;";
        }
        else
        {
            connectionString = "Data Source=" + sqlServer + ",1433;Network Library=DBMSSOCN;" + "User id=" + login + ";Password=" + password + ";";
        }

        try
        {
            using (var con = new SqlConnection(connectionString))
            {
                con.Open();
                databases = con.GetSchema("Databases");

                foreach (DataRow database in databases.Rows)
                {
                    String databaseName = database.Field<String>("database_name");
                    short dbID = database.Field<short>("dbid");
                    DateTime creationDate = database.Field<DateTime>("create_date");
                }
            }
        }
        catch(Exception ex)
        {
            databases = null;
            MessageBox.Show(ex.Message.ToString());
        }

        return databases;
    }

当我尝试在多个服务器上调用该方法时,我遇到了异常:

  

登录失败。登录来自不受信任的域,不能与Windows身份验证一起使用。

  

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。

我在SO和网站上搜索后使用了Network Library=DBMSSOCN;的连接字符串,所以我不知道这种方法有什么问题。

0 个答案:

没有答案