मैं इसी त्रुटि में भाग गया, लेकिन ऐसा इसलिए था क्योंकि मेरी सरणी वास्तविक डेटा से भर नहीं रही थी। मेरे पास बाइट्स की एक सरणी थी जो लंबाई के बराबर थी, लेकिन मान अभी भी 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"];
}
मैं कितना गलत था! वास्तव में उस ब्लॉब में वास्तविक बाइट्स प्राप्त करने के लिए, मुझे वास्तव में उस परिणाम को OracleBlob
ऑब्जेक्ट में पढ़ने की आवश्यकता थी। एक डाटासेट/datatable भरने के बजाय, मैं ऐसा किया:
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)
{
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;
}
विंडोज फोन 8 पर, उपरोक्त काम नहीं करता है क्योंकि बिटमैपसोर्स निर्माण विकल्प का समर्थन नहीं करता है। क्या आप किसी भी विकल्प को जान लेंगे? – vishal
@vishal आपको एक [WriteableBitmap] (http://msdn.microsoft] का उपयोग करना होगा।com/en-us/पुस्तकालय/विंडोज़/apps/windows.ui.xaml.media.imaging.writeablebitmap.aspx)। – Clemens
धन्यवाद। मैं पहले से ही उस विकल्प को आजमा रहा हूं: http://stackoverflow.com/questions/17714662/convert-int-to-byte-type-pointer-in-c-sharp/17715106?noredirect=1#17715106 – vishal