2009-07-09 73 views
3

我需要一个完整的字符串列表,这些字符应该在sql字符串参数中转义以防止异常。我假设我需要将所有违规字符替换为转义版本,然后将其传递给我的ObjectDataSource筛选器参数。什么字符应该在sql字符串参数中转义

+5

为什么你不使用带有绑定变量的参数化SQL?如果你使用绑定变量,你永远不需要转义任何东西。 – 2009-07-09 17:52:34

+0

我决定不使用具有绑定变量的参数化SQL,因为我有可变数量的参数。 – Slim 2009-07-09 17:56:30

+1

是否没有参数集合?对于可变数量的参数非常有用。 – 2009-07-09 18:00:58

回答

3

不,ObjectDataSource会处理所有的转义。任何参数化查询也不需要转义。

0

SQL书籍在线: 搜索字符串字面量:

字符串字面

一个字符串由零个或多个字符用引号括起来。如果一个字符串包含引号,则必须转义这些引号才能解析表达式。由于\ x0000字符是字符串的空终止符,因此\ x0000以外的任何双字节字符都可以在字符串中使用。

字符串可以包含需要转义序列的其他字符。下表列出了字符串文字的转义序列。

\一个 警报

\ b 退格

\˚F 换页

\ n 新线

\ r 回车符

\吨 地平线TAL标签

符\ v 垂直制表

\” 引用标记

\ 反斜杠

以十六进制

1

\ xhhhh Unicode字符正如其他人所指出的那样,有99%的人认为他们需要提出这个问题,他们做错了。参数化是要走的路。如果你真的需要逃避自己,试着找出你的数据库访问库是否提供了这个功能(例如,MySQL有mysql_real_escape_string)。

0

这是我用来摆脱撇号的一种方式。你可以用你遇到的其他违规角色做同样的事情。 (在VB.Net中的例子)

Dim companyFilter = Trim(Me.ddCompany.SelectedValue) 

If (Me.ddCompany.SelectedIndex > 0) Then 
     filterString += String.Format("LegalName like '{0}'", companyFilter.Replace("'", "''")) 
End If 

Me.objectDataSource.FilterExpression = filterString 

Me.displayGrid.DataBind()