سؤال

لدي بعض المتاعب في تحميل الملف من دفق الذاكرة إلى قاعدة البيانات (إنه مرئي في DB كـ 0x ، لذلك أعتقد أنه لا يتم حفظه بشكل صحيح). لست متأكدًا مما إذا كانت هناك مشكلة في إنشاء الدفق أو حفظها إلى DB من الدفق يجب أن يتم بشكل مختلف.

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();
        }
    }

ما الخطأ الذي افعله؟ أنا أستخدم مكتبة Docx CodePlex.

هل كانت مفيدة؟

المحلول

أنت تكتب إلى الدفق ثم تحاول على الفور القراءة منه دون إعادة الإرجاع... لذلك لا توجد بيانات للقراءة.

لحسن الحظ ، هناك طريقة سهلة للغاية لتبسيط الكود على أي حال:

byte[] file = stream.ToArray();

ومع ذلك ، لديك مشكلة محتملة أخرى:

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

هذا سيجعل MemoryStream عند مُثَبَّت حجم 500k - لا أكثر ، لا أقل. أظن أن هذا ليس ما تريده ؛ أقترح عليك التخلص من storage متغير واتصل بالمعلمة فقط MemoryStream البناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top