每次 Loop 迭代后的 Changing 和 Variable。

Changing and Variable after each Loop iteration.

我目前正在开发一个简单的程序,可以在包裹被提取时将其记录到访问数据库中。一切正常,但有一件事。

如果列表框 (lstPackages) 中有多个包,它会将它们全部记录为具有相同的包 ID (pid)。变量 packageInfo 包含 id、商店名称和 运行 时间。所以它读作 "id shop run".

所以我拆分了 packageInfo 变量来创建 pid(只是包 ID),这样我就可以获得每个包的唯一 ID。

我觉得因为我正在为每个循环使用它应该如下所示。

拆分、连接到数据库、查询信息、关闭连接并重复列表框中的每个项目。

它确实对每个项目重复,但正如我所说,数据库中的每个记录都包含与列表框中最后一个项目相同的 ID。

提前致谢!

For Each item In lstPackages.Items

            Dim idArray() As String = packageInfo.Split(" ")
            pid = idArray(0)


            con.ConnectionString = My.Settings.con
            cmd.Connection = con
            con.Open()
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "INSERT INTO packages 
                  (ID, Shop, Run, [Time of Pickup], [PPU Name], [PPU ID], [tmSig])
                   VALUES ('" & pid & "', '" & shop & "', '" & run & "', '" & time & "', '" & ppu & "', '" & ppuid & "', ""C:\Users\Sam\OneDrive\Signatures\" & shop & "\" & runPath & "\" & shoptime & ".jpg"")"

            cmd.ExecuteNonQuery()

            con.Close()

        Next

您的代码存在几个问题,即字符串与 assemble 和 SQL 命令的连接。这是一个安全风险,您应该在 Command 对象上使用 Parameters 集合。

否则,您只需重新排列代码即可使用以下结构。我在代码中留下了评论,我认为您有数据 and/or 逻辑问题:-

con.ConnectionString = My.Settings.con
'Open the connection and hold it open
con.Open()

cmd.Connection = con
cmd.CommandType = CommandType.Text

For Each item In lstPackages.Items

    '*** THIS IS THE PROBLEM 
    '"packageInfo" does not change for each iteration. Did you mean item.Split(" ")?
    Dim idArray() As String = packageInfo.Split(" ")
    pid = idArray(0)


    '*** WHERE ARE ALL OF THE VARIABLES FOR THIS SQL STATEMENT LOADED? ***
    '*** ARE THEY THE REMAINING ELEMENTS OF "idArray"?
    '*** THEY NEED TO BE INITIALISED SOMEWHERE

    'Use the same instantiated Command object to improve performance
    cmd.CommandText = "INSERT INTO packages 
              (ID, Shop, Run, [Time of Pickup], [PPU Name], [PPU ID], [tmSig])
               VALUES ('" & pid & "', '" & shop & "', '" & run & "', '" & time & "', '" & ppu & "', '" & ppuid & "', ""C:\Users\Sam\OneDrive\Signatures\" & shop & "\" & runPath & "\" & shoptime & ".jpg"")"

    cmd.ExecuteNonQuery()

Next

con.Close()

有关使用 Parameter 集合的示例,请参阅这篇 Microsoft 文章。它适用于 SQL 更新,但原则仍然适用于 SELECT。

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2