我在ID卡数据库中有一些爆头,我希望在我在VB 2008中编写的程序中显示。以下代码基于Microsoft的支持文章,可以找到它here和具体来自步骤'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是正确的。
有关此错误原因的建议吗?一个更好的方法来解决这个问题?
答案 0 :(得分: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用作第一个参数