【问题标题】:Powershell Try/Catch Exception to SQLPowershell 尝试/捕获 SQL 异常
【发布时间】:2014-01-27 20:25:15
【问题描述】:

您好,关于从 powershell 脚本记录到 SQL 的错误,我遇到了一个小问题。

function Invoke-Sqlcmd {
    param(
    [Parameter(Position=0, Mandatory=$true ,ValueFromPipeline = $false)] [string]$ServerInstance,
    [Parameter(Position=1, Mandatory=$true ,ValueFromPipeline = $false)] [string]$Database,
    [Parameter(Position=2, Mandatory=$false ,ValueFromPipeline = $false)] [string]$UserName,
    [Parameter(Position=3, Mandatory=$false ,ValueFromPipeline = $false)] [string]$Password,
    [Parameter(Position=4, Mandatory=$true ,ValueFromPipeline = $false)] [string]$Query,
    [Parameter(Position=5, Mandatory=$false ,ValueFromPipeline = $false)] [Int32]$QueryTimeout=30
    )

    $conn=new-object System.Data.SqlClient.SQLConnection
    if ($UserName -and $Password)

        { $conn.ConnectionString="Server={0};Database={1};User ID={2};Pwd={3}" -f $ServerInstance,$Database,$UserName,$Password }
    else
        { $conn.ConnectionString="Server={0};Database={1};Integrated Security=True" -f $ServerInstance,$Database  }

    $conn.Open()
    $cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
    $cmd.CommandTimeout=$QueryTimeout
    $ds=New-Object system.Data.DataSet
    $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
    [void]$da.fill($ds)
    $conn.Close()
    $ds.Tables[0]
}
try {
    ThisCommandDoesNotExist
}
catch {
    $Exception = $_.Exception.Message
    Invoke-Sqlcmd -Serverinstance mysqlserver -Database Mydatabase -Query "Insert into MyTable Values (GetDate(),'$Exception')"
}

我收到的错误是:

Invoke-Sqlcmd: Exception calling "Fill with "1" argument(s): "Incorrect syntax near 'ThisCommandDoesNotExist'

我想这与单引号有关,我不是 SQL 专家。 但我已经尝试对所有“'”和“,”和“。”进行替换。但仍然抛出同样的错误。

【问题讨论】:

  • 如果注释掉“Invoke-Sqlcmd”那一行,还会出现错误吗?
  • ThisCommandDoesNotExist 是什么?
  • 自己找到了解决方案。最后,当我在 .,:= 上替换时它起作用了

标签: sql tsql powershell try-catch powershell-3.0


【解决方案1】:

您是对的,单引号使 powershell 将您的 $variable 视为字符串。

您可以使用反引号 ` 转义 powershell 特殊字符。

【讨论】:

    【解决方案2】:

    自己找到了解决方案。最后,当我在 .,:=

    上替换时它起作用了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2011-12-05
      • 2014-05-11
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多