如何在Word VBA SQL查询中处理单引号?

8

我从下拉菜单中获得一个客户名称,然后使用该值查询一个 Excel 电子表格,但是名称可能包含一个单引号(例如:Adam's Meat)。这会破坏我的应用程序,那么我如何使用包含单引号的变量进行查询?

Private Sub cboCompany_Change()
            Dim customerName As String
            customerName = cboCompany.Value

rsT.Open "SELECT Customer, Postcode, Address1, Address2, State, Country FROM Customers WHERE  Customer = '" & customerName & "'", cn, adOpenStatic
2个回答

11

如果你在指定字符串时用到两个单引号'',其中一个会被转义,导致最终只有一个单引号。你可以尝试这样替换:

customerName = Replace(customerName, "'", "''")

但这样它就无法与电子表格中的客户名称匹配了? - Morgan
当实际值匹配发生时,两个单引号将被视为一个单引号。 - The King
好的,我必须将其更改为customerName = Replace(customerName,"'","''")。谢谢Sarfraz。 - Morgan
@Morgan:欢迎,距离我上次使用VB已经有5年了,语法都忘记了 ;) - Sarfraz

10

这样会使你容易受到SQL注入攻击。我建议将其更改为参数化查询,就像这样:

Dim cmd as NEW ADODB.Command

With cmd
 .CommandText=”SELECT foo from tblBar where foo=?”
 .Parameters.Append .CreateParameter("@foo", adVarChar, adParamInput, 50, “What ever you want”)
 .ActiveConnection=dbCon
 .CommandType=adCmdText
End With

Set rst=cmd.execute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接