防止使用参数查询不工作的转义撇号

Posted

技术标签:

【中文标题】防止使用参数查询不工作的转义撇号【英文标题】:Preventing escaping apostrophes with parameter query not working 【发布时间】:2011-11-22 21:01:33 【问题描述】:

我试图通过使用带有 SqlConnection 的参数化查询来避免在我的字符串变量中转义撇号,但它不起作用。任何帮助将不胜感激。

更新:这是当前代码...

 'Populate Connection Object
 Dim oCnn As New SqlConnection(strConnection)

 'Define our sql query
 Dim sSQL As String = "INSERT INTO [" & foreignTable & "] (data_text) VALUES (@data_text) ; "

 'Populate Command Object
  Dim oCmd As New SqlCommand(sSQL, oCnn)

  'Add up the parameter, associated it with its value

   oCmd.Parameters.AddWithValue("@data_text", data_text)

  'Opening Connection for our DB operation  
  oCnn.Open()

  Try
      Dim results As Integer = oCmd.ExecuteScalar
  Catch ex As Exception
      LabelImport.Text &= "<font color=red>ROOT Import ERROR: " & ex.ToString & ", From Database: " & dbName & ", Text String: " & data_text & "</font><br />"
      Throw
  End Try

  oCnn.Close()
  oCmd.Parameters.Clear()

感谢您的帮助。

【问题讨论】:

【参考方案1】:

是的,这是不对的。

应该是这样的:

Dim sSQL As String = "INSERT INTO [" & foreignTable & "] (data_text) VALUES (@data_text);" 

对于参数:

oCmd.Parameters.AddWithValue("@data_text", data_text) 

注意:我不“认为”您可以将表名作为参数传递。您必须在字符串中包含表名。见Parametise table name in .Net/SQL?

另外,改变这个:

Dim results As Integer = oCmd.ExecuteScalar

Dim results as Integer = oCmd.ExecuteNonQuery()

【讨论】:

现在除了 10 条左右带有撇号的记录外,IT 正在工作 @marc11h 你能定义不为 10 条带撇号的记录工作吗?错误? 是的,因为这个数字可以更大,这是测试数据。 我想我明白了。问题是记录没有被插入。没有报告错误。 @marc11h 也许通过添加您现在使用的新代码来编辑您的问题。它的工作原理非常简单,所以我猜你仍然有语法错误。【参考方案2】:

您只能在创建查询时使用表名(我的意思是从部分连接它:"INSERT INTO " + foreignTable + " (data_text) VALUES...,AFAIK),而不是作为查询参数。查看SqlParameterCollection.AddWithValue on MSDN 了解更多关于SqlCommand 参数的信息,这里也有很好的例子。

'Populate Connection Object 
Dim oCnn As New SqlConnection(strConnection) 

'Define our sql query 
Dim sSQL As String = "INSERT INTO " & foreignTable & " (data_text) VALUES (@data_text);" 

'Populate Command Object 
Dim oCmd As New SqlCommand(sSQL, oCnn) 

'Add up the parameter, associated it with its value 
oCmd.Parameters.AddWithValue("@data_text", data_text) 

'Opening Connection for our DB operation   
oCnn.Open()

编辑:

+ 更改为 &amp;,因为 C# 是“本机语言”。

【讨论】:

感谢您提供的链接,我会调查一下。

以上是关于防止使用参数查询不工作的转义撇号的主要内容,如果未能解决你的问题,请参考以下文章

将列名转义为查询参数

怎么防止SQL注入?

mysql-防止XSS攻击

XPath 查询中的撇号 (')

在codeigniter中逃避足够的防止sql注入的保护

如何防止 SQL 注入转义字符串