تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
خزن ملفات داخل قاعدة البيانات
#3
(27-02-19, 02:57 AM)elgokr كتب :
وعليكم السلام ورحمة الله وبركاته

مرحباً اخى الكريم
شوف لتوضيح الامر بسهولة جداً

لنقول الان انك تقوم بعمل تحويل الملف اى كان الامتداد من امتتداد حسب الملف الى byte

الى هنا وجميل ويتم ذلك من خلال هذا السطر
كود :
               byte[] barray = System.IO.File.ReadAllBytes(dlg.FileName);

الان عند اتمام تسجيل او حفظ الملف بقاعدة البيانات يتم من خلال هذا السطر لديك
كود :
           cmd = new SqlCommand("Insert into TB_In  (Id,Number,Organization,Date,Type,Title,Notes,FileName,FileData) Values ('" + text_Id.Text + "','" + comboBox1.Text + "','" + text_Number.Text + "','" + dateTimePicker1.Value + "','" + comb_Type.Text + "','" + text_Title.Text + "','" + text_Notes.Text + "','" + filename + "', '" + barray + "' )", con);

والى هنا لا يوجد مشكلة لديك فى اتمام ذلك وما تفعله ايضاً هو حفظ اسم الملف والامتداد من خلا filename

والذى يتم تعبئته القيمة من خلال هذا السطر
كود :
               string filename = System.IO.Path.GetFileName(dlg.FileName);

الان كل ما تحتاج اليه لفعل العكس وهو قراءة الـ byte الى ملف حسب الامتداد

فى البداية ستقوم بعمل استعلام مثلاً كالتالى [ الاستعلام لتوضيح الفكرة وليس للتطبيق ]
كود :
SELECT FileName,FileData FORM TB_In WHERE Id=1

الان الاستعلام عبارة عن جلب صف واحد من الجدول تحت رقم 1 لـ ID 
ومن خلالها يتم جلب كلاً من عمود اسم الملف و عمود byte للملف المخزن

الان لنقوم تم تخزين الاستعلام فى DT وهو DataTable
ركز هنا جيداً وبداية الان حتى تفهم كيفية التعامل مع الامر

الان اصبح معى 
كود :
DT.Rows[0]["FileName"]

وهو يخص اسم الملف و الامتداد الخاص به

وكذلك اصبح معى
كود :
DT.Rows[0]["FileData"]

وهو يخص الملف المخزن بقاعدة البيانات

الان سنقوم بعمل الكود الاول وهو
كود :
           string[] fi = DT.Rows[0]["FileName"].ToString().Split('.');

طيب ماذا يعنى هذا الكود [ لا يشرط عمل هذا السطر او استخدامه بنائاً لما تلاحظة فى الاكواد القادمة ]
تم وضع هذا السطر من الكود حتى تتمكن من الاستفادة منه من افكار

لنتخيل مثلاً ان اسم الملف والامتداد المسجل فى قاعدة البيانات هو 
PHP كود :
FileName.exe 

وبمجرد ما قمت بعمل السطر الاخير من الكود يعنى انا قمت بعمل تقسيم لاسم الملف ليصبح كالتالى
PHP كود :
FileName
exe 

ليصبح كل جزء على حدي

الان ناتى للخطوة الثانية وهو انشاء مسار مخصص لحفظ الملف [يطبق هذا الكود اذا كنت تريد تشغيل الملف فعلياً وليس للعرض فقط ]
كود :
           string Patch = System.IO.Path.GetTempPath() + "Temp_test." + fi[1];

أو ممكن بهذا الشكل
كود :
           string Patch = System.IO.Path.GetTempPath() + DT.Rows[0]["FileName"];

الان ناتى الى تحول كود الملف الذى بقاعدة البيانات الى ملف فعلى على الجهاز لاتمام تشغيله

كل ما عليك استخدام الكود بهذا الشكل
كود :
           byte[] runFile = (byte[])DT.Rows[0]["FileData"];
           System.IO.File.WriteAllBytes(Patch, runFile);


والان لاتمام تشغيل الملف مباشراً طبق السطر التالى
كود :
           System.Diagnostics.Process.Start(Patch);

طيب ولو لاستدعاء اسم الملف من قاعدة البيانات دون تشغيل
يكفي فقط استخدام الكود التالى
كود :
           MessageBox.Show(DT.Rows[0]["FileName"]);

ولاستخدام المسار بعد تكون الملف فاليك استخدام الكود التالى
كود :
           MessageBox.Show(Patch);

الان بعد الانتهاء يفضل دائماً تنفيذ كود تفريغ مجلد Temp الخاص بالجهاز
خاصة هذا المسار
كود :
           MessageBox.Show(System.IO.Path.GetTempPath());

لا اعلم اذا شرحي هنا جيداً وقد تصل لك الفكرة كاملاً
فسامحنى اذا كنت مخطاء او سهوت عن شئ فى الشرح

اذا كان السورس مرفق كمثال لما تريده مع قاعدة البيانات / سكربت قاعدة البيانات
لكان الامر اسهل وابسط فى عمل الكود كاملاً عملياً مع الشرح بدلاً من الشرح النظري هنا

اتمنى ان تتمكن من التعامل مع الشرح صحيحة وان تكون الفكرة وصلت لك
وسامحنى مجدداً اذا يوجد اى اخطاء فجميع ما فى الرد كتابتاً منى دون اختبار 

تحياتى لك
وتمنياتى لك التوفيق

شكرا جزيلا اخي العزيز على المجهود الرائع لكن حاولت تنفيذ الكود على البوتون الموجود في الفورم لا يمكن التحميل كما انا بحاجة لتحميل الملف من خلال البوتون الموجود في الداتا كرد فيو. ((وانا كلي امتنان وشكر لك ولشرحك الجميل))


الملفات المرفقة صورة/صور
       
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
RE: خزن ملفات داخل قاعدة البيانات - بواسطة رسول555 - 27-02-19, 01:31 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  هل الكود هذا صحيح خاص بالربط مع قاعدة بيانات SQL server تركي احمد 1 854 25-05-24, 12:50 AM
آخر رد: غزة العزة
Star [سؤال] مشكلة في السحب والأفلات داخل الفورم عند التصميم reduouo 1 623 02-03-24, 02:39 AM
آخر رد: Taha Okla
  [سؤال] احتاج الى مساعدة فى تعديل مشروع خاص C# وقاعدة البيانات SQL Server كتكوت المصري 1 885 15-08-23, 02:02 AM
آخر رد: WAEL ABED
  [C#.NET] جلب البيانات من اليوزر كنترول Heemo 1 971 02-06-23, 12:57 AM
آخر رد: G20
  [سؤال] ضغط ملفات PDF flawer69 1 806 06-04-23, 03:03 AM
آخر رد: Taha Okla
  كيفية قراءة وعرض ملفات pdf مخزنة في داتا كرد فيو من خلال زر بتن وبدون open file dialo مرتضى 0 838 31-10-22, 12:53 AM
آخر رد: مرتضى
  انشاء قاعدة بيانات عن طرق الكود amonem 3 1,743 07-10-22, 12:51 PM
آخر رد: asemshahen5
  [سؤال] ازي احفظ قيم فارغة في قاعدة البيانات mazentq 4 2,111 04-10-22, 11:15 AM
آخر رد: رضوان الجماعي
Sad [C#.NET] تطبيق الويندوز لا يستطيع تحديد قاعدة البيانات المثبتة معى التطبيق عند تشغيله على حاسو Kamel Soltani 1 1,122 03-10-22, 04:09 PM
آخر رد: asemshahen5
  [سؤال] حول تكرار البيانات في نفس التاريخ sher 2 1,173 21-06-22, 12:07 PM
آخر رد: sher

التنقل السريع :


يقوم بقرائة الموضوع: