2009-07-09 72 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()