VB6:这个Sub是否达到过?

时间:2016-06-14 21:59:02

标签: vb6

我正在重写一些VB6遗留程序并运行以下代码(为安全起见,变量名称已更改)...

  Dim blnValue1 As Boolean
  Dim strForValue As String

  sqlQuery = "SELECT a.* FROM databaseName a " & _
                  "WHERE a.ssn = '" & strInput1 & "'" & _
                  " and a.column2 = '" & strInput2 & "'"

  Set rsInsert = New ADODB.Recordset
  rsInsert.Open sqlQuery, Connection

  blnValue1 = False
  Do Until rsInsert.EOF
    strForValue = Trim(rsInsert("value"))

    If strForValue <> "1234" Then
      [some unimportant code here]
    End If

    blnValue1 = True
    rsInsert.MoveNext
  Loop

  If blnValue1 = False Then
    InsertValue
  End If

我知道这可能非常明显,但我想确定:Sub&#34; InsertValue&#34;在这段代码中永远不会被调用吗?我的意思是当Recordset读取时bool设置为true。是否有一个VB6或Recordset特定的规则我不知道会使&#34; blnValue1&#34;在某些时候是假的?

我无法运行旧的VB6代码来检查它是否到达&#34; InsertValue&#34; Sub因为它访问了我不想搞砸的生产文件,直到对代码所做的每件事都有一个完美的处理。

1 个答案:

答案 0 :(得分:6)

我的第一直觉是,如果sql查询没有返回任何结果, 可以调用InsertValue函数。无论实际发生了什么,我相信这是作者的意图。

在进一步思考时,我对第一次调用EOF之前没有为RecordSet设置MoveNext的问题有一个模糊的怀疑 - 类似于文件流不是如何设置它直到你尝试读取文件的末尾 - 所以我去了documentation。阅读此内容,如果没有结果,则EOF 设置为True

  

如果打开不包含记录的Recordset对象,则BOF和EOF属性设置为True,Recordset对象的RecordCount属性设置为0.

因此,我的初始本能得到了证实。 在查询未返回任何结果的情况下,将调用InsertValue方法。

在使用此代码时,您应该修复那个令人讨厌的SQL注入漏洞。