आपको SqlBytes
. का एक उदाहरण पास करने में सक्षम होना चाहिए SqlCommand
. के पैरामीटर के रूप में जहां कहीं भी varbinary
ज़रूरी है। वही SqlBytes
क्लास में एक कंस्ट्रक्टर ओवरलोड होता है जो एक Stream
को लपेटता है . तो बस एक SqlBytes
बनाएं स्ट्रीम से उदाहरण, फिर उसे पैरामीटर मान के रूप में पास करें।
दूसरे शब्दों में, इसके बजाय इसे आपके संशोधित कोड में फ़िट करना:
MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
SqlParameter _SqlParameter = new
SqlParameter("@" + _ImageFieldName, SqlDbType.Image);
_SqlParameter.Value = _MemoryStream.ToArray();
_SqlCommand.Parameters.Add(_SqlParameter);
इसका इस्तेमाल करें:
MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
_MemoryStream.Position = 0; // I *think* you need this
SqlParameter _SqlParameter = new
SqlParameter("@" + _ImageFieldName, SqlDbType.VarBinary);
_SqlParameter.Value = new SqlBytes(_MemoryStream);
_SqlCommand.Parameters.Add(_SqlParameter);
बेशक, MemoryStream
. का निपटान करना न भूलें और ये सभी अन्य IDisposable
कमांड निष्पादित होने के बाद के उदाहरण।
संपादित करें:ठीक है, मैंने अभी आपके संपादन का निचला भाग देखा है, जिसका अर्थ यह है कि डेटा बहुत बड़ा है और आप इसे स्मृति में समाप्त नहीं करना चाहते हैं, और यह वास्तव में उस समस्या का समाधान नहीं करेगा। बात यह है कि, यदि मान इतना बड़ा है, तो इसे varbinary
में संग्रहीत करना एक बुरा विचार है पहले स्थान पर कॉलम।
यदि आप SQL Server 2008 का उपयोग कर रहे हैं, तो आप इसके बजाय FILESTREAM का उपयोग (और चाहिए!) कर सकते हैं। यह वास्तव में करता है SqlFileStream वर्ग के माध्यम से ADO.NET में "सच" स्ट्रीमिंग का समर्थन करें।
यदि आप FILESTREAM
का उपयोग नहीं कर सकते हैं स्टोरेज, तो मुझे डर है कि आपको किसी समय मेमोरी में होने वाले डेटा से निपटना होगा, यह काफी हद तक ADO.NET कैसे काम करता है।