mi sono imbattuto in questo stesso errore, ma era perché la mia matrice non si stava riempito con i dati effettivi. Avevo una serie di byte uguale alla lunghezza che si supponeva fosse, ma i valori erano tutti ancora 0
- non erano stati scritti!
Il mio problema particolare - e sospetto per gli altri che arrivano a questa domanda, è stato a causa del parametro OracleBlob
. Non pensavo di averne bisogno, e ho pensato che potevo semplicemente fare qualcosa del tipo:
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"];
}
Quanto sbagliavo! Per ottenere effettivamente i veri byte in quel blob, avevo bisogno di leggere effettivamente quel risultato in un oggetto OracleBlob
. Invece di riempire un set di dati/DataTable, ho fatto questo:
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();
}
Poi, ho potuto prendere myArray
e fare questo:
if (myArray != null)
{
if (myArray.Length > 0)
{
MyImage.Source = LoadBitmapFromBytes(myArray);
}
}
E la mia rivista LoadBitmapFromBytes
funzione dal altra risposta:
public static BitmapImage LoadBitmapFromBytes(byte[] bytes)
{
var image = new BitmapImage();
using (var stream = new MemoryStream(bytes))
{
stream.Seek(0, SeekOrigin.Begin);
image.BeginInit();
image.StreamSource = stream;
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.EndInit();
}
return image;
}
Su Windows Phone 8, quanto sopra non funziona poiché BitmapSource non supporta l'opzione di creazione. Vuoi sapere qualche alternativa? – vishal
@vishal Dovresti usare un [WriteableBitmap] (http://msdn.microsoft.com/it-it/library/windows/apps/windows.ui.xaml.media.imaging.writeablebitmap.aspx). – Clemens
Grazie. Ho già provato questa opzione ora: http://stackoverflow.com/questions/17714662/convert-int-to-byte-type-pointer-in-c-sharp/17715106?noredirect=1#17715106 – vishal