1

我在 ID 卡数据库中有一些头像,我想在我用 VB 2008 编写的程序中显示这些头像。以下代码基于 Microsoft 的支持文章,可以在此处找到,具体来自步骤 '11' .

    aiuQuery.CommandText = "select a.ImageData From Images a, Cardholders b WHERE b.UserText6 = '" & _
                           empID & "' And a.CardholderID = b.CardholderID"
    aiuReader = aiuQuery.ExecuteReader
    If aiuReader.Read Then
        Dim bytBLOBData(aiuReader.GetBytes(1, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
        aiuReader.GetBytes(1, 0, bytBLOBData, 0, bytBLOBData.Length)
        Dim stmBLOBData As New MemoryStream(bytBLOBData)
        pbHeadShot.Image = Image.FromStream(stmBLOBData)
    End If
    aiuReader.Close()

'If' 块内的第一行 (Dim bytBLOBData...) 生成一个错误,声称“索引超出了数组的范围”。

SQL 在程序外部测试时是正确的。

有关此错误的原因可能是什么的任何建议?一个更好的方法来解决这个问题?

4

1 回答 1

2

GetBytes方法需要将要读取的字段的索引作为第一个参数。
在 NET 中,数组索引从零开始而不是从 1

  Dim bytBLOBData(aiuReader.GetBytes(0, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
  aiuReader.GetBytes(0, 0, bytBLOBData, 0, bytBLOBData.Length)

您的查询只返回一个字段,因此您应该使用值 0 作为第一个参数

于 2013-09-11T20:33:12.607 回答