每次循环迭代后更改和变量。

时间:2015-07-16 04:07:48

标签: vb.net foreach listbox access-vba basic

我目前正在开发一个简单的程序,可以在拾取包时将包记录到访问数据库中。一切都很好,但有一点。

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

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

我觉得因为我在每个循环中使用a,所以应该如下所示。

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

每个项目都会重复,但就像我说的那样,数据库中的每条记录都包含与列表框中最后一项相同的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

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题,即用于汇编SQL命令的字符串串联。这是一种安全风险,您应该使用Parameters对象上的Command集合。

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

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 UPDATE,但原理仍适用于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