VB6:这个Sub是否达到过?

Lit*_*man 1 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
Run Code Online (Sandbox Code Playgroud)

我知道这可能很明显,但我想确定:在这段代码中永远不会调用Sub"InsertValue"吗?我的意思是当Recordset读取时bool设置为true.是否存在VB6或Recordset特定规则,我不知道会在某些时候使"blnValue1"错误?

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

Joe*_*orn 6

我的第一反应是,这有可能调用InsertValue函数如果SQL查询没有返回任何结果.无论实际发生什么,我相信这是作者的意图.

但是,在进一步反思时,我EOF对第一次调用之前没有为RecordSet设置的问题有一个模糊的怀疑MoveNext- 类似于文件流在您尝试读取文件末尾之前没有设置它的方式 -所以我去了文档.读这篇文章,它看起来像EOF 设置为True如果没有结果:

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

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

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