将数据表中的图片列表插入到MS Access数据库VB.NET中

时间:2016-03-22 13:53:04

标签: vb.net image ms-access datatable

我有一个包含几条记录的数据表。数据表的每一行都有一个存储图片的字段。当我遍历数据表行以将它们插入到数据库的表中时,该行的每个字段都被正确保存;但是对于每条记录,都会保存数据表第一行中的图片。我跟踪了代码,它确实访问了访问的行并尝试将图片保存在数据表的每一行中。我使用的是VB.NET,数据库是MS Access。

我的代码如下所示:

For Each dr As DataRow In dt.Rows
    cmd.CommandText = "INSERT INTO Table1 (" & _
            "[ID], " & _
            "[Name], " & _
            "[BDate], " & _
            …….
            "[TelNo], " & _
            "[Photo]) " & _
        " VALUES(" & _
            dr("ID") & ", '" & _
            dr("Name") & "', " & _
            dr("BDate") & ", '" & _
            …….
            dr("TelNo") & "', " & _
            img & ")"

    cmd.Parameters.Add(img, OleDb.OleDbType.Binary).Value = dr("Photo")
    cmd.ExecuteNonQuery()
Next

2 个答案:

答案 0 :(得分:1)

代码完全符合您的要求:

在循环中,所有字段都会根据数据集行中的值而变化,因为您为每个字段执行此操作:dr(thefield)

之外的图片,因为您只是执行此操作:img 因此,它始终是相同的图像。

你应该有类似dr(image)的东西(但我怀疑它是否有效)

答案 1 :(得分:0)

我自己找到答案。问题相当微妙。在OleDbCommands中,参数未命名。参数用?表示? (问号)。在我的问题的代码片段中,变量img的值为?,它由循环前的语句指定。参数的值必须按其外观的顺序提供。我的情况是,只有一个参数,我通过语句提供了一个参数:

    cmd.Parameters.Add(img, OleDb.OleDbType.Binary).Value = dr("Photo")

但是,在循环的每次迭代中,将添加另一个参数。对于第二个记录,参数的实际值将是第二个参数,第三个记录将在第三个位置具有其值,等等。因为在OleDbCommands中参数的值由它们的顺序标识,并且因为只有一个参数在我的情况下,总是使用首先提供的图片(即第一个记录的图片)。 因此,问题归结为“我如何在每次迭代中提供单个参数?”答案是通过包含这个宝贵的陈述来删除每次迭代添加的参数:

    cmd.Parameters.Clear()

作为循环中的最后一个语句。 很抱歉有冗长的解释。