首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL Server 單引號處理兩大方案:轉義字符與參數化查詢

     編輯:MySQL 綜合教學

SQL Server 單引號處理兩大方案

拼接 SQL 字符串時,變量含單引號會導致語法錯誤。本文對比兩種修復方案。

方案一:字符串轉義(VB 示例)

在單引號前再加一個單引號(SQL Server 標準轉義):

Function ProcessStr(str As String)
    Dim pos As Integer, stedest As String
    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

調用:sql = "SELECT * FROM t WHERE name = '" & ProcessStr(userInput) & "'"

缺點:增加 CPU 開銷,且易漏轉義導致注入風險。

方案二:參數化查詢(ADODB.Command,推薦)

使用 ? 佔位符,將值綁定到參數對象:

Set cmd = New ADODB.Command
Set param = New ADODB.Parameter
param.Type = adChar
param.Size = 10
param.Direction = adParamInput
param.Value = userInput  ' 含單引號也安全
cmd.Parameters.Append param

cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM employee WHERE fname = ?"
cmd.CommandType = adCmdText
Set rs = cmd.Execute()

方案對比

維度轉義函數參數化查詢
性能每次拼接解析預編譯,重複執行極快
安全性依賴開發者調用原生防注入,無法繞過
代碼維護SQL 與數據混雜結構與數據分離

進階:存儲過程 + 參數

將邏輯封裝為預編譯存儲過程,應用層僅傳參數,網絡流量最小、執行計劃複用率最高,是企業級開發首選模式。

完整 VB 示例下載

文中包含雙按鈕演示項目(Form1 + MSFlexGrid + ComboBox),可直接運行對比效果。環境:NT 4.0 SP4 + SQL Server 7.0 + PUBS 示例庫。

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