gpt4 book ai didi

sql - 使用 ExecuteNonQuery() 的 Powershell 脚本抛出异常 "Incorrect syntax near ' s'。”

转载 作者:行者123 更新时间:2023-12-01 18:59:06 25 4
gpt4 key购买 nike

我编写了一个非常简单的脚本,用于从文件和文件夹收集数据,并将其上传到 SQL 数据库。我相信我的问题与 parameterized sql 的问题有关,但我不明白如何或为什么。

我认为我需要做的是重新格式化sql字符串以防止某些字符进入。

感谢任何帮助。

这是代码:

$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $dbConnection
$Command.CommandText = "INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('$i','$items','$temp','$currentDate')"

$Command.ExecuteNonQuery()

"INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('$i','$items','$temp','$currentDate')"

这是输出(我用它推送了 sql 命令字符串作为测试):

INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('ATI Te
chnologies','61.16 MB','39','05/24/2013 21:05:56')
ATI Technologies 61.16 MB 39
1
INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('ATIToo
l','0.00 MB','30','05/24/2013 21:05:56')
ATITool 0.00 MB 30
1
INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('Auran'
,'7,496.04 MB','28','05/24/2013 21:05:56')
Auran 7,496.04 MB 28
Exception calling "ExecuteNonQuery" with "0" argument(s): "Incorrect syntax near
's'.
Unclosed quotation mark after the character string ')'."
At line:143 char:25
+ $Command.ExecuteNonQuery()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException

最佳答案

无论您尝试在“Auran”记录之后插入什么数据,其中都包含单引号/撇号。当您使用字符串连接来构造查询时,这是一个巨大风险,并且会让您面临 SQL 注入(inject)攻击。

将您正在构建的字符串粘贴到 SSMS 或其他可以为您提供 SQL 语法突出显示的工具中,您就会看到它。

您在 Coding Horror 上找到的帖子给出了正确的建议/答案 - 使用参数化查询,这个问题就会消失。出于性能和安全原因,现在通常不鼓励对 SQL 语句进行字符串连接。更不用说作为源代码更容易阅读。

$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $dbConnection
$Command.CommandText = "INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES (@name,@size,@length,@dt)";
$Command.Parameters.Add("@name", $i);
$Command.Parameters.Add("@size", $items);
$Command.Parameters.Add("@length", $temp);
$Command.Parameters.Add("@dt", $currentdate);
$Command.ExecuteNonQuery();

关于sql - 使用 ExecuteNonQuery() 的 Powershell 脚本抛出异常 "Incorrect syntax near ' s'。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com