不要讨论SQL注入和清理等等......
由于各种原因,我正在进行无法实现的操作,并且在不使用查询参数的情况下构建和执行动态SQL查询。
所以...我正在构建列列表和值列表,然后我有以下代码:
insertRecord.setSql("INSERT INTO MyTable(" & columns & ") VALUES(" & values & ")");
这适用于大多数记录,但对于一些记录,其中一个字符串字段值有一个撇号或单引号:
'SHERIFF'S OFFICE'
这给了我SQL错误:Incorrect syntax near 'S'.
我尝试过以多种方式使用保留单引号,但没有帮助:
insertRecord.setSql("INSERT INTO MyTable(" & columns & ") VALUES(" & preserveSingleQuotes(values) & ")");
OR
insertRecord.setSql(PreserveSingleQuotes("INSERT INTO MyTable(" & columns & ") VALUES(" & values & ")"));
有没有办法逃避所有撇号,或以其他方式正确格式化我的sql字符串,而不是在每个值上单独使用ReplaceNoCase(colValue, "'", "''")
,因为我正在构建字符串(这确实有用)?
答案 0 :(得分:1)
我不确定setSql
语句的语法,但也许你缺少字符串值的单引号。你试过添加吗?
我的意思是这个。假设SQL语句需要看起来像这样(注意每个值周围的引号):
INSERT INTO MyTable
(column1, column2, column3)
VALUES
('value 1', 'value 2', 'value 3')
然后setSql
语句应如下所示:
insertRecord.setSql("INSERT INTO MyTable (column1, column2, column3) VALUES ('value 1', 'value 2', 'value 3')");
所以你可以尝试类似的东西(注意值周围的单引号):
insertRecord.setSql("INSERT INTO MyTable(" & columns & ") VALUES('" & preserveSingleQuotes(values) & "')");
您可能还需要遍历每个values
,以便将每个{{1}}括在单引号中。