2010-03-03 10 views
6

मुझे मेमोरी स्ट्रीम से डेटाबेस में फ़ाइल अपलोड करने में कुछ परेशानी है (यह डीबी में 0x के रूप में दिखाई दे रहा है, इसलिए मुझे लगता है कि यह ठीक से सहेजा नहीं जाता है)। मुझे यकीन नहीं है कि धारा के निर्माण या स्ट्रीम से डीबी में सहेजने में यह समस्या अलग-अलग होनी चाहिए।.docx फ़ाइल को सहेजने के लिए मेमोरीस्ट्रीम का उपयोग करना C#

private void test { 
     byte[] storage = new byte[500000]; 
     using (MemoryStream stream = new MemoryStream(storage)) 
     DocX documentWord = DocX.Create(stream); 
     // some stuff 
     documentWord.Save(); 
     databaseFilePut(stream); 
} 


public static void databaseFilePut(MemoryStream stream) { 
     byte[] file; 
     using (var reader = new BinaryReader(stream)) { 
       file = reader.ReadBytes((int) stream.Length); 
       // reader.Close(); 
     } 
      //stream.Close(); 
     //} 
     using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) 
     using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) { 
      sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file; 
      sqlWrite.ExecuteNonQuery(); 
     } 
    } 

मैं क्या गलत कर रहा हूं? मैं डॉक्क्स कोडेप्लेक्स लाइब्रेरी का उपयोग कर रहा हूं।

उत्तर

7

आप स्ट्रीम पर लिख रहे हैं और फिर से रीवाइंड किए बिना तुरंत पढ़ने की कोशिश कर रहे हैं ... इसलिए पढ़ने के लिए कोई डेटा नहीं है।

सौभाग्य से, वैसे भी कोड को सरल बनाने का एक बहुत ही आसान तरीका है:

byte[] storage = new byte[500000]; 
using (MemoryStream stream = new MemoryStream(storage)) 
... 

यह MemoryStream एक तय कर दी है कर देगा:

byte[] file = stream.ToArray(); 

हालांकि, अगर आप एक और संभावित समस्या मिल गया है 500K का आकार - और नहीं, कम नहीं। मुझे संदेह है कि आप जो चाहते हैं वह नहीं है; मेरा सुझाव है कि आप storage चर से छुटकारा पाएं और केवल पैरामीटर रहित MemoryStream कन्स्ट्रक्टर को कॉल करें।

+0

धन्यवाद। मुझे पता था कि मैं कुछ याद कर रहा था :-) – MadBoy

संबंधित मुद्दे