在powershell和SQL中转义双引号

我正在编写 PowerShell 脚本,其中一项要求是将错误消息存储在 SQL 服务器表中。

这里的问题是错误消息可以以不同的形式出现。在这种特殊情况下,错误如下。

"Exception calling "open" with "0" argument(s): "login failed for user 'DOMAINUSER'."

我已经设法将它存储在 PowerShell 变量中,问题是如何将它插入到 SQL Server 表中而不会出错。双引号导致插入错误。

我试图通过添加"$the_error“来逃避双引号。这没有帮助。

产生错误的方式如下。

$return_Value = PsFunction

PsFunction 返回一个自定义对象,error_message 是其中的成员之一,还有其他值。

现在,这就是我正在做的

$query = "insert into table (error_message) values ('{0}') " -f $return_value.error_message

我不得不替换单引号和双引号,感觉像是在胡说八道,但是很想插入在执行过程中出现的错误。

回答

不要转义字符串。改用参数。

例如

$the_error = @"
"Exception calling "open" with "0" argument(s): "login failed for user 'DOMAINUSER'."
"@


$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString = "server=localhost;database=tempdb;integrated security=true"
$con.Open()

$sql = "INSERT INTO ERRORS(message) values (@message)"
$cmd = $con.CreateCommand()
$cmd.CommandText = $sql

$cmd.CommandText
$pMessage = $cmd.Parameters.Add("@message", [System.Data.SqlDbType]::NVarChar,-1)
$pMessage.Value = $the_error

$cmd.ExecuteNonQuery()

$con.Close()

  • Use parameters for the other fields too.

以上是在powershell和SQL中转义双引号的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>