【问题标题】:How to query SQL Server using PowerShell?如何使用 PowerShell 查询 SQL Server?
【发布时间】:2019-02-04 20:56:24
【问题描述】:

我在网上找到了一些代码,但到目前为止我无法让它连接到我的 SQL Server 数据库。我已经关注这个网站了:https://blogs.msdn.microsoft.com/walzenbach/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008/

我已允许远程连接,将端口 1433 添加到我的防火墙等。然后我从 PowerShell ISE 运行此代码:

    $dataSource = “\\SCCM12-01\MSSQLSERVER”
    $user = “MyID\OurDomain.org”
    $pwd = “MyPassword”
    $database = “CM1”
    $connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”

    $connection = New-Object System.Data.SqlClient.SqlConnection
    $connection.ConnectionString = $connectionString
    $connection.Open()

当我运行它时,我得到以下错误。

使用“0”参数调用“Open”的异常:“在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到服务器或未找到服务器 无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:25 - 连接 字符串无效)”

【问题讨论】:

  • 试试不带 \\.
  • 不,这也不起作用。当我删除 \\ 我收到此错误:使用“0”参数调用“打开”的异常:“在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误:25 - 连接字符串无效)“在第 13 行 char:1 + $connection .Open()
  • 这通常不是问题,但我在您的代码中看到许多智能引号“”。考虑用真实的引号替换那些"并让我们知道这是否改变了什么?

标签: sql-server powershell


【解决方案1】:

如果您有简单的查询,我推荐Select-SQLView powershell 模块。它允许从表或视图中快速选择行。它存储您的数据库和服务器名称,因此您不必每次都提供此值。

像往常一样,您可以将结果推送到表格或 GridView。

如果需要更复杂的查询,请使用SQLCommands 模块。

【讨论】:

    【解决方案2】:

    不确定为什么会出现此错误。可以参考这个链接https://github.com/Tervis-Tumbler/InvokeSQL

    你可以试试这个-

    function Invoke-SQL {
        param(
            [string] $dataSource = ".\SQLEXPRESS",
            [string] $database = "MasterData",
            [string] $sqlCommand = $(throw "Please specify a query.")
          )
    
        $connectionString = "Data Source=$dataSource; " +
                "Integrated Security=SSPI; " +
                "Initial Catalog=$database"
    
        $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
        $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
        $connection.Open()
    
        $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
        $dataset = New-Object System.Data.DataSet
        $adapter.Fill($dataSet) | Out-Null
    
        $connection.Close()
        $dataSet.Tables  
    }
    

    【讨论】:

    • OP 正在尝试使用 Sql Server 身份验证,而您的示例基于集成的 Windows 安全性。 (哪个更聪明,但不是被问到什么。)
    【解决方案3】:

    错误信息实际上解释了问题所在:

    “SQL 网络接口,错误:25 - 连接字符串无效”。

    连接字符串有问题。由于您掩盖了大部分细节,因此很难说确切的内容。也许聪明的报价会破坏事情?也许您的密码中有引号字符?无论如何,看起来您的用户 ID 为 invalid parameter

    $connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”
    

    试试User Id,而不是像这样的uid

    Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
    

    【讨论】:

      【解决方案4】:

      您只需在不使用数据库登录时将“Integrated Security”更改为“true”

      **Integrated Security=True**
      

      【讨论】:

        猜你喜欢
        • 2012-01-15
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        相关资源
        最近更新 更多