我有一个for循环,用于搜索SQL查询,并将“ CT.Item(i).ParameterName”替换为其实际值:
Dim SQLQP As String = SQL
For i=0 To CT.Count - 1
SQL = SQL.Replace("CT.Item(i).ParameterName, "'" & CT.Item(i).Value & "'")
SQLQP = SQLQP.Replace(CT.Item(i).ParameterName, "''' + " & CT.Item(i).ParameterName & " + '''")'.Replace("'%'", "''%''")
End If
Next
'CT.Item(i).ParameterName'是参数名称(例如:@ p1,@ p2,@ p3等) 问题是,如果有一个名为@ p10的参数名,则在上面的循环中将其视为“ @ p1” +“ 0”,因此当更改@ p1时,它也会同时更改@ p10并留下一个0。如何避免这个问题?
我在搜索时发现的其他解决方案要么不考虑标点符号,要么使用REGEX,这不适用于SQL.replace函数。
感谢您的帮助
编辑:我已经通过反转循环解决了'SQL'的问题。但是,现在我在使用“ SQLQP”时遇到了同样的问题:
else语句
Else
SQLQP = SQLQP.Replace(CT.Item(i).ParameterName, "''' + " & CT.Item(i).ParameterName & " + '''")
返回:
[some sql code]... WHERE ([RM_INSTRUCTION].[INSTRUCTION_TIME] >= ''' + @p1 + ''') AND ([RM_INSTRUCTION].[ITEM_CATEGORY_UID] IN (''' + @p2 + ''',''' + @p3 + ''',''' + @p4 + ''',''' + @p5 + ''',''' + @p6 + ''',''' + @p7 + ''')) AND ([RM_INSTRUCTION].[ITEM_DETAIL_UID] IN (''' + @p8 + ''',''' + @p9 + ''',''' + ''' + @p1 + '''0 + '''))')
'''+'''+ @ p1 +'''0 +'''不正确,应该是'''+ @ p10 +''',其他所有内容都是正确的。
编辑2
根据要求,这里是“替换”之前的SQLQP
[some sql]...WHERE ([RM_INSTRUCTION].[INSTRUCTION_TIME] >= @p1) AND ([RM_INSTRUCTION].[ITEM_CATEGORY_UID] IN (@p2,@p3,@p4)) AND ([RM_INSTRUCTION].[ITEM_TYPE_UID] IN (@p5)) AND ([RM_INSTRUCTION].[ITEM_DETAIL_UID] IN (@p6,@p7,@p8,@p9,@p10))
这是它的外观:
[some sql]...WHERE ([RM_INSTRUCTION].[INSTRUCTION_TIME] >= ''' + @p1 + ''') AND ([RM_INSTRUCTION].[ITEM_CATEGORY_UID] IN (''' + @p2 + ''',''' + @p3 + ''',''' + @p4 + ''')) AND ([RM_INSTRUCTION].[ITEM_TYPE_UID] IN (''' + @p5 + ''')) AND ([RM_INSTRUCTION].[ITEM_DETAIL_UID] IN (''' + @p6 + ''',''' + @p7 + ''',''' + @p8 + ''',''' + @p9 + ''',''' + @p10 + '''))
答案 0 :(得分:0)
通过@Charles May解决了问题:
SQLQP = SQLQP.Replace(",", " , ")
SQLQP = SQLQP.Replace(")", " )")
SQLQP = SQLQP.Replace("(", "( ")
For i = CT.Count - 1 To 0 Step -1
SQL = SQL.Replace(CT.Item(i).ParameterName, "'" & CT.Item(i).Value & "'")
SQLQP = SQLQP.Replace(" " + CT.Item(i).ParameterName + " ", "''' + " &
CT.Item(i).ParameterName & " + '''")
End If
Next