原理:將單引號 ' 雙寫為 '' (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
使用 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()
? 為參數佔位符Private Sub Command1_Click()
str = ProcessStr(Combo1.Text)
mycommand.CommandText = "SELECT * FROM employee WHERE fname = '" & str & "'"
' ... 執行並填充 MSFlexGrid
End Sub
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 參數綁定。