当前位置: 首页 > 面试题库 >

使用ExecuteNonQuery()的Powershell脚本会抛出异常“在's'附近的正确语法”。

谭景明
2023-03-14
问题内容

我认为我需要做的是重新格式化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注入攻击。

将您正在构造的字符串粘贴到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();


 类似资料:
  • 问题内容: 我有一个Java代码: 然后我有SQLException: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在’?’附近使用正确的语法。 问题答案: 您应该执行不带任何参数的,如下所示: 使用参数调用将按原样执行提供的查询(没有绑定参数)。

  • 我使用PowerMock(Mockito)模拟同一类中另一个方法的子调用。更具体地说,我有这样的东西: 现在在我的单元测试中,我能够使用间谍模拟MyMethod2的响应,并做一些类似。但是,当我做这样的事情时,会发生一些奇怪的事情:。当我在测试期间调用myClass.myMethod1()时,它会抛出一个NullPointerException,但奇怪的是,如果我使用调试器并检查,e是MyExce

  • 问题内容: 我写了一个程序,用单词列表填充数据库。问题是,每次我尝试运行代码时,它都会引发“线程“ main”中的异常” java.sql.SQLException:在“ s”附近:语法错误”。我知道在此论坛上也曾提出过类似的问题,但是在我的代码中,我无法纠正该错误。 因此,我求助于您。 这是代码 这些是我跑步时遇到的错误。 问题答案: 使用PreparedStatement避免输入错误的问题:

  • 未捕获的mysqli_sql_exception:您的SQL语法中有一个错误;请检查与您的MariaDB服务器版本相对应的手册,以获得在“near”中使用的正确语法?在第2行按'score'desc'排序。.. 我已经研究了在‘?’附近使用的正确语法。但我认为我的问题不同。

  • 问题内容: 我是刚接触Reactor和反应式编程的新手。 我目前正在编写类似于以下代码: 这个例子可能很愚蠢,确实有更好的方法来实现这种情况,但是重点是: 在块中使用异常是错误的还是应该将其替换为? 这两种方式有什么实际区别? 问题答案: 有几种方法可以被视为方便的异常抛出方法: 可以简化可能导致错误或空流的元素处理的一种方法是operator 。 以下代码显示了如何使用它来解决问题: 如我们所见

  • 我是一个新的项目Reactor和反应编程一般。 我目前正在编写一段类似于以下内容的代码: 这两种做法有什么实际区别吗?