【问题标题】:Powershell API request issue - very strangePowershell API 请求问题 - 很奇怪
【发布时间】:2017-10-30 11:25:27
【问题描述】:

我正在从 USDA 食品 API 中提取各种食品的营养报告。我为请求使用了一个 powershell 脚本,美国农业部文档规定每个请求最多有 1500 条记录。我可以将这些值一直拉到 max=164,但是一旦我尝试将其更改为 165,我就会在“S”附近得到一个不正确的语法错误。关于可能导致这种情况的任何线索?下面的代码和错误

PS:

    Function Add-APIData ($server, $database, $text)
    {

$scon = New-Object System.Data.SqlClient.SqlConnection
$scon.ConnectionString = "SERVER=$server;DATABASE=$database;Integrated Security=true"

$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.Connection = $scon
$cmd.CommandText = $text
$cmd.CommandTimeout = 0

$scon.Open()
$cmd.ExecuteNonQuery()
$scon.Close()
$cmd.Dispose()
$scon.Dispose()
    }
    //this is where the max value is stored 
    [string]$webstring = "https://api.nal.usda.gov/ndb/nutrients/?format=json&max=164&api_key=CLJnYzvrhMBcFtoQ4hohIL4Scs3tiRpOFXS7UhHM&nutrients=205&nutrients=204&nutrients=208&nutrients=269&fg=0100"
    $webget = New-Object System.Net.WebClient
    $result = $webget.DownloadString($webstring)

$result = ConvertFrom-Json $result
$add = @()

foreach ($r in $result.report.foods){

        $add += "INSERT INTO BRUH VALUES ('" + $r.ndbno + "','" + $r.name + "')"


}

    Add-APIData -server "NATHAN\SQLEXPRESS" -database "Lab2" -text $add

错误:

使用“0”参数调用“ExecuteNonQuery”的异常:“'S' 附近的语法不正确。 字符串 ')' 后面的非闭合引号。" 在行:12 字符:5 + $cmd.ExecuteNonQuery() + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SqlException

【问题讨论】:

    标签: sql-server api powershell


    【解决方案1】:

    您的数据中很可能有一个撇号(单引号)。因为您将字符串连接到 INSERT 语句中,数据库将无法正确解析这些字符串,这是 SQL 注入攻击的主要原因之一!

    如果您将查询输出到控制台,然后将其粘贴到 SSMS 中,语法突出显示将快速显示给您。

    第二种(远程)可能性是您超出了查询的最大允许长度。

    更改您的代码以使用参数化查询 (example) 并一次执行一个 INSERT,而不是一次执行一大堆。

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多