2017-10-30 10 views
0

私はUSDAの食品APIからさまざまな食品の栄養報告を引き出しています。私の要求にはpowershellスクリプトを使用しており、USDAの文書には要求ごとに最大1500レコードが記載されています。私は値を最大= 164まで引き上げることができますが、私が試してみるとすぐに165に変更すると、 'S'の近くに誤った構文エラーが出ます。これを引き起こしている可能性のある手掛かりはありますか?コードとPowershell APIリクエストの問題 - 非常に奇妙な

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 

エラー: 'S' の近くに「不適切な構文 閉じられていない引用符の後に:。 "0" 引数(複数可)との "は、ExecuteNonQuery" を呼び出す

例外文字列 ')'ラインで :12チャー:5 + $ cmd.ExecuteNonQuery() + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [ ]、MethodInvocationException + FullyQualifiedErrorId:SqlException

答えて

1

おそらく、データにアポストロフィ(一重引用符)があります。文字列をINSERTステートメントに連結しているため、これらはデータベースによって正しく解析されず、これがSQLインジェクション攻撃の主な原因の1つです!

クエリをコンソールに出力してSSMSに貼り付けると、シンタックスの強調表示でこれがすぐに表示されます。

クエリの最大許容長を超えている可能性があります。

パラメータ化されたクエリ(example)を使用するようにコードを変更し、同時に一度にINSERTの単一のコードを実行します。

関連する問題