27-02-19, 02:57 AM
وعليكم السلام ورحمة الله وبركاته
مرحباً اخى الكريم
شوف لتوضيح الامر بسهولة جداً
لنقول الان انك تقوم بعمل تحويل الملف اى كان الامتداد من امتتداد حسب الملف الى 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());لا اعلم اذا شرحي هنا جيداً وقد تصل لك الفكرة كاملاً
فسامحنى اذا كنت مخطاء او سهوت عن شئ فى الشرح
اذا كان السورس مرفق كمثال لما تريده مع قاعدة البيانات / سكربت قاعدة البيانات
لكان الامر اسهل وابسط فى عمل الكود كاملاً عملياً مع الشرح بدلاً من الشرح النظري هنا
اتمنى ان تتمكن من التعامل مع الشرح صحيحة وان تكون الفكرة وصلت لك
وسامحنى مجدداً اذا يوجد اى اخطاء فجميع ما فى الرد كتابتاً منى دون اختبار
تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]
ساهم دائماً فى
لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله
▼ شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]
ساهم دائماً فى
لكل من يقوم بالمساهمةفى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله
▼ شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية

