كيف يمكنك إدراج ملف (PDF) في عمود SQL Server متغير ثم استرداده لاحقًا؟

StackOverflow https://stackoverflow.com/questions/443635

  •  22-07-2019
  •  | 
  •  

سؤال

إنني أتطلع إلى الحصول على نتائج تشغيل التقرير (ملف PDF من Crystal Reports)، وإجراء تسلسل له، وإلصاقه في حقل متغير، وبعد ذلك أكون قادرًا على إلغاء تسلسله وتقديمه مرة أخرى إلى المستخدم.

في الوقت الحالي، لا بد لي من استخدام ADO .NET القديم (SqlClient، SqlCommand، وما إلى ذلك) فقط.

هل هناك أي مطبات لهذا؟ما هو بناء الجملة الأساسي لإنجاز ذلك بالنظر إلى حقيقة أنني أعرف المسار على الجهاز المحلي حيث تم حفظ ملف PDF حاليًا؟

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

المحلول

يحرر: رأيت للتو في وثائق MSDN الذي - التي ستتم إزالة الصورة.من الأفضل استخدام VARBINARY (MAX).(مهلا لم أكن أعرف ذلك).

إجابتي القديمة: VARBINARY لديه حد 8 كيلو بايت.يمكن أن يكون صغيرًا جدًا بحيث لا يمكنه تخزين ملفات PDF.من الأفضل استخدام نوع البيانات IMAGE.

استخدم المعلمات لإدراج/تحديد بياناتك عبر SqlCommand، ويمكنك استخدام SQL العادي فقط مثل أي حقل عادي.

البيانات التي تمررها إلى حقل الصورة هي عبارة عن مصفوفة من البايتات.

تحرير 2:نظرًا لأنك تستخدم C#، فيجب عليك استرداد البيانات باستخدام DataReader.لإنشاء DataReader، استخدم علامة SequentialAccess الموجودة على الملف SqlCommand.ExecuteReader, ، لمنع قراءة البيانات في الذاكرة مبكرًا جدًا.

نصائح أخرى

وأنا حقا لا تستخدم معلمة byte[] إلى IDbCommand على الإطلاق. ما إذا كان لديك PDF هو 100 ميجا بايت كبيرة؟ وبقدر ما أعرف، وهذا من شأنه الحصول على كل تلك 100 ميغابايت من قاعدة البيانات الخاصة بك (تحتاج هذا المبلغ من الذاكرة على الخادم الخاص بك) قبل إرسال النتيجة إلى متصفح الطالبة. الآن التفكير في الحصول على عدد من الطلبات المتزامنة لملفات PDF مختلفة من ما يقرب من هذا الحجم ... في الثانية الواحدة ... هذا ليس قابلة للغاية.

لحل ممكن، يرجى مراجعة "النقطة + ستريم = BlobStream" أو مقال كتبته لمجلة. NET هنا في هولندا قبل عامين. يستخدم هذا الأسلوب أوامر SQL Server للوصول أجزاء من BLOB من فئة Stream مشتقة.

وهذه المادة هي باللغة الهولندية، ولكن <لأ href = "http://download.microsoft.com/download/1/0/e/10e9204a-88fe-4e8b-94f6-e14497dded6b/dnm12_109_Code.zip" يختلط = " نوفولو noreferrer "> يجب أن يكون المثال التعليمات البرمجية التي تتفق معها ما يكفي للحصول على انك بدأته. أيضا، يبدو بيتر دي JONGHE قد كتب على على CodeProject أن يتوسع في مقالتي قليلا، تعميم لأكثر من الأعمدة image فقط في SQL Server. هذا المقال باللغة الإنجليزية.

وآمل أن يساعد هذا لك مشكلتك.

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