Sql Powershell读取包含“";加上;签名

Sql Powershell读取包含“";加上;签名,sql,powershell,special-characters,Sql,Powershell,Special Characters,我构建了一个powershell脚本,允许我运行并通过电子邮件发送从sql文件读取的sql查询结果: function global:readscript($path) { #using UTF7 encoding to allow select with accented/french/russian/chinese/... etc chars $inenc = [System.Text.Encoding]::UTF7 $reader = new-object Syst

我构建了一个powershell脚本,允许我运行并通过电子邮件发送从sql文件读取的sql查询结果:

function global:readscript($path)
{
    #using UTF7 encoding to allow select with accented/french/russian/chinese/... etc chars
    $inenc = [System.Text.Encoding]::UTF7
    $reader = new-object System.IO.StreamReader($path, $inenc)
    $finalquery = ""

    while ($line = $reader.ReadLine())
    {
        $finalquery += $line
    }
    $reader.close()

    return $finalquery
}

function global:get-result($query)
{
    $oracleconnection = new-object Oracle.ManagedDataAccess.Client.OracleConnection
    $oracleconnection.connectionstring = $connectionstring
    $oracleconnection.Open()
    $oraclecommand = $oracleconnection.CreateCommand()
    $oraclecommand.CommandText = $query
    $reader = $oraclecommand.ExecuteReader()

    #...etc
}

$scriptquery = readscript "d:\mysqlquery.sql"
get-result($scriptquery)
到目前为止,一切都很正常,除了这个sql脚本包含“+”符号用于计算

假设文件mysqlquery.sql包含以下行:

(SELECT COUNT(a.ID)) + (SELECT COUNT(b.ID))
我可以在控制台中看到它被翻译成

(SELECT COUNT(a.ID)) (SELECT COUNT(b.ID))
当然会抛出这个恼人的异常“缺少右括号”


从txt文件中读取加号时,如何将其转义?

发现了一种(非常)肮脏的方法:在我的sql文件中,我将“+”替换为“.plus”,然后在我的powershell脚本中继续执行$query=$query.replace(“.plus.”,“+”)。。。我并不为此感到骄傲,我认为这是有关系的。我的猜测是,该文件不是真正的UTF7(该文件的.Net没有解码器),因此您的肮脏解决方案可能是最好的方法。这非常有意义!我从来没有想到编码是加号被忽略的原因。谢谢