我遇到了同样的错误,但是因为我的数组没有被实际数据填充。我有一个字节数组,长度应该是正确的,但是值仍然都是0
- 它们还没有被写入!
我的特定问题 - 我怀疑其他人也会遇到这个问题 - 是由于OracleBlob
参数引起的。我认为我不需要它,以为我可以像下面这样做:
DataSet ds = new DataSet();
OracleCommand cmd = new OracleCommand(strQuery, conn);
OracleDataAdapter oraAdpt = new OracleDataAdapter(cmd);
oraAdpt.Fill(ds)
if (ds.Tables[0].Rows.Count > 0)
{
byte[] myArray = (bytes)ds.Tables[0]["MY_BLOB_COLUMN"];
}
我错了!为了获取那个 blob 中的真实字节,我需要将结果读入一个 OracleBlob
对象中。而不是填充数据集/数据表,我应该这样做:
OracleBlob oBlob = null;
byte[] myArray = null;
OracleCommand cmd = new OracleCommand(strQuery, conn);
OracleDataReader result = cmd.ExecuteReader();
result.Read();
if (result.HasRows)
{
oBlob = result.GetOracleBlob(0);
myArray = new byte[oBlob.Length];
oBlob.Read(array, 0, Convert.ToInt32(myArray.Length));
oBlob.Erase();
oBlob.Close();
oBlob.Dispose();
}
然后,我可以取出myArray
并执行以下操作:
if (myArray != null)
{
if (myArray.Length > 0)
{
MyImage.Source = LoadBitmapFromBytes(myArray);
}
}
而我的修改后的LoadBitmapFromBytes
函数来自于另一个答案:
public static BitmapImage LoadBitmapFromBytes(byte[] bytes)
return image;
}
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat; image.CacheOption = BitmapCacheOption.OnLoad;
- 否则我只会得到一个空白图像区域。 - vapcguy