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

在PowerShell中转义包含单引号的字符串以准备进行SQL查询

公冶智刚
2023-03-14
问题内容

我正在尝试运行以下查询,该查询使用某人的名字并将其插入到SQL Server数据库表中。

$name = "Ronnie O'Sullivan"

$dataSource = "127.0.0.1"
$database = "Danny"
$connectionString = "Server=$dataSource;Database=$database;Integrated Security=True;"

$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()

$query = "INSERT INTO People(name) VALUES('$name')"

$command = $connection.CreateCommand()
$command.CommandText = $query
$command.ExecuteNonQuery()

$connection.Close()

我面临的问题是单引号导致我的查询出现问题。查询被执行

INSERT INTO People(name) VALUES('Ronnie O'Sullivan')

这会导致SQL语法错误。

我的问题是如何转义$ name变量,使其在SQL端呈现。

一种解决方案是对我的$ name变量进行查找和替换,查找:’replace:”

$name.Replace("'", "''")

有没有更优雅的解决方案,或者我似乎找不到的功能?

谢谢你。


问题答案:

您可以尝试将代码更新为使用可处理字符串中引号的参数化值:

$query = "INSERT INTO People(name) VALUES(@name)"

$command = $connection.CreateCommand()
$command.CommandText = $query
$command.Parameters.Add("@name", $name)  -- | Out-Null (may be required on the end)
$command.ExecuteNonQuery()


 类似资料:
  • 我可以将替换为其他一些字符序列(例如)来执行字符串替换,但是如果我可以用正则表达式来替换,这将更加清楚。

  • 问题内容: 我想像这样在Bash中显示一个字符串 当然可以这样 但是如何在字符串周围使用单引号的同时完成此操作? 问题答案: 不起作用。但是以下工作原理: 在bash的手册页中: 即使在单引号之前加反斜杠,也不能在单引号之间引起单引号。 .... $’string’* 形式的单词经过特殊处理。该单词扩展为字符串,并按ANSI C标准的规定替换反斜杠转义字符。 *

  • 问题内容: 我正在尝试在vb.net中使用sql查询插入数据,如下所示。名称= corp int’l poc = 1 当我尝试插入时,出现错误(“字符串’“之后的未封闭的引号)。当我尝试仅用1个单引号插入名称时,就会发生这种情况。 因此,我添加了一个replace函数,以将2个单引号替换为1个单引号来转义符号。没有错误,但是当我查看数据库时,添加了2个单引号而不是1个。 谁能告诉我如何通过参数化查

  • 问题内容: 我知道准备好的语句的功能,但是我不能在这里使用它。我通过HTTP(而不是通过JDBC)将sql查询发送到外部服务器。如何对SQL查询进行转义字符串?有没有办法通过JDBC做到这一点?还是我应该为此使用自定义类/函数? ps另外,我已经连接到其他数据库,因此可以使用JDBC函数。 问题答案: 这听起来很不安全。如果要通过HTTP发送SQL语句,则可能会受到中间人攻击(以及其他攻击)的危害

  • 问题内容: 我有一个将文本字段中的值发送到数据库的应用程序。 例如,我有一个带有一个字段的表单(文本框)。当我按“确定”按钮时,文本字段的内容将作为记录插入到表中。我只是修剪并将文本框的文本提取到变量中,然后将其传递给我的SQL字符串。 问题是,无论何时像“ It’s”或“ Friend’s”之类的单引号都被标识为字符串的结尾。在Delphi中,我看到了避免这种情况的方法。您有什么想法吗? 问题答

  • 问题内容: 我正在尝试对字符串列( 包含数字 )进行排序。 您会看到Mysql的自然排序算法放在后面( 对于大多数应用程序来说都可以 ),但是我有独特的需求,因此我希望结果应该像这样排序。 仅使用SQL 是否可能,或者我必须在应用程序级别操纵结果集? 问题答案: 继续 假设 它始终为WORD_space_NUMBER,这应该可行: 使用POSITION查找空间,使用SUBSTRING捕获其后的数字