首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MS-SQL Server 單引號處理兩大法:字串轉義與參數化查詢 (ADO Command) 完整對比

     編輯:MySQL 資料庫相關知識

MS-SQL Server 單引號處理兩大法完整對比


資料庫開發頻繁使用動態 SQL,單引號未處理會導致語法錯誤。本文詳細對比 字串轉義法 與 參數化查詢法 (ADO Command)。


方法一:字串轉義函數 (VB6 範例)

原理:將單引號 ' 雙寫為 '' (SQL Server 轉義語法)。

Function ProcessStr(str As String)
    Dim pos As Integer
    pos = InStr(str, "'")
    While pos > 0
        str = Mid(str, 1, pos) & "'" & Mid(str, pos + 1)
        pos = InStr(pos + 2, str, "'")
    Wend
    ProcessStr = str
End Function
  • 發現單引號 → 前方插入單引號
  • 缺點:增加系統處理時間,維護成本高

方法二:ADO Command 參數化查詢 (推薦)

使用 ADODB.Command 物件,將含單引號的字串作為參數傳遞,完全避免字串拼接。

Set parm = New ADODB.Parameter
parm.Type = adChar
parm.Size = 10
parm.Direction = adParamInput
parm.Value = Combo1.Text  ' 含單引號的值

Set mycommand = New ADODB.Command
mycommand.ActiveConnection = cnn1
mycommand.CommandText = "SELECT * FROM employee WHERE fname = ?"
mycommand.CommandType = adCmdText
mycommand.Parameters.Append parm

Set rstByQuery = mycommand.Execute()
  • ? 為參數佔位符
  • 優點:簡潔、高效、防 SQL 注入
  • 進階:搭配預儲存程序 (Stored Procedure) 效能更佳

完整 VB6 表單程式碼對比

Command1_Click:轉義法

Private Sub Command1_Click()
    str = ProcessStr(Combo1.Text)
    mycommand.CommandText = "SELECT * FROM employee WHERE fname = '" & str & "'"
    ' ... 執行並填充 MSFlexGrid
End Sub

Command2_Click:參數法

Private Sub Command2_Click()
    parm.Value = Combo1.Text
    mycommand.CommandText = "SELECT * FROM employee WHERE fname = ?"
    ' ... 執行並填充 MSFlexGrid
End Sub

測試資料準備

UPDATE employee SET fname = 'Paolo''''f' WHERE emp_id = 'PMA42628M'  -- 存雙引號
UPDATE employee SET fname = 'Paolo''f' WHERE emp_id = 'PMA42628M'    -- 存單引號

結論

參數化查詢 (方法二) 為最佳實務:效能優、安全性高、程式碼乾淨。現代開發請優先採用參數化或 ORM 參數綁定。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved