我有读取excel文件并在sql数据库中搜索值的代码。这是代码的一部分:
for ($i=1; $i -le $rowMax-1; $i++)
{
$name = $sheet.Cells.Item($rowName+$i,$colName).text
$mail = $sheet.Cells.Item($rowMail+$i,$colMail).text
#test $Query = ‘ SELECT * FROM dbo.tbl1 where value = ‘ + “‘” +$mail + “‘”
$Query = ‘ SELECT * FROM dbo.tbl1 where id = 3’
Invoke-Sqlcmd -serverinstance $DatabaseServerName -Database $Database -Username $Uid -Password $Pwd -query $Query -ErrorAction Stop
Write-Host ("My Name is: "+$name)
Write-Host ("My mail is: "+$mail)
Write-Host $query
}
#close excel file
$objExcel.quit()
如果我用数字查询(SELECT * FROM dbo.tbl1 where id = 3)
,就可以了:
id : 3
className : PersonBase
keyValue : 3
typeCd : 6
value : [email protected]
description :
usermodify :
datemodify :
My Name is: G Karen
My mail is: [email protected]
SELECT * FROM dbo.tbl1 where id = 3
如果我执行查询:
$Query = ‘ SELECT * FROM dbo.tbl1 where value = ‘ + “‘” +$mail + “‘”
我收到此错误:
Invoke-Sqlcmd:“''附近的语法不正确。消息102,级别15,状态1,过程,行1。在行:8 char:1 + Invoke-Sqlcmd -serverinstance $ DatabaseServerName -Database $ Database ... + ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CategoryInfo:InvalidOperation:(:) [Invoke-Sqlcmd],SqlPowerShellSqlExecutionException + FullyQualifiedErrorId:SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
在我调试时,输出看起来很好。我可以将其粘贴到服务器上,并且select语句可以正常工作:
My Name is: G Karen
My mail is: [email protected]
SELECT * FROM dbo.tbl1 where value = '[email protected]'
怎么了?
PowerShell乐于接受Unicode(非ASCII范围)引号,而不是通常的ASCII范围引号-参见此答案
例如,如您的代码中所示:
相比之下,我怀疑,SQL Server就不会怀疑这些替代的,所以你必须使用ASCII范围'
,并"
为引号嵌入在查询中。
因此,立即修复为:
$Query = ‘ SELECT * FROM dbo.tbl1 where value = ‘ + “'” +$mail + “'”
注意如何只将里面 的字符“...”
从更改‘
为'
;PowerShell解释并删除的外部引号可以继续使用非ASCII范围的引号。
但是,您可以更简单地将可扩展字符串("..."
)与嵌入式变量引用结合使用:
$Query = " SELECT * FROM dbo.tbl1 where value = '$mail'"
请注意,我还将外部双引号切换为其ASCII范围版本。即使在PowerShell中,通常也要坚持使用通常的ASCII范围引号,这样最好,以免共享代码时由于字符编码而引起问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句