تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
خزن ملفات داخل قاعدة البيانات
#1
السلام عليكم اخوتي الاعزاء 
واجهت مشكلة في المشروع وهي خزن ملف معين باي صيغة تمكنت من خزن الملف ولكن لم اتمكن من استرجاع الملف من البوتون الموجود في الداتا كرد فيو لذا ارجو من الاخوة الخبراء النظر في كودات الفورم.
 وسوف ادرج كودات الفورم كاملا قد يكون الخلل في مكان معين مع الشكر الجزيل
كود :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace banat_alhssan
{

   public partial class In_form : Form
   {
       //string folder = "";

       //كود ربط الفيجوال بيسك مع  sql//

       SqlConnection con = new SqlConnection(@"Server= DESKTOP-KJB46EH\MORABSQLE ;Database=DB;Integrated Security=True");
       SqlCommand cmd;
     
       SqlDataAdapter Da;
       DataTable dt = new DataTable();



       public In_form()
       {
           InitializeComponent();


         
       

           dataGridView1.Columns.Clear();
           rasool();
           shamas();

       
       }
     

       void rasool()
       {
           //تعبئة الداتا كرد فيو
           cmd = new SqlCommand("select * from TB_In", con);
           Da = new SqlDataAdapter(cmd);
           Da.Fill(dt);
           this.dataGridView1.DataSource = dt;
           //  dataGridView1.Columns[1].Width = 120;
           dataGridView1.Columns[0].HeaderText = "التسلسل";    
           dataGridView1.Columns[1].HeaderText = "رقم الكتاب";
           dataGridView1.Columns[2].HeaderText = "الجهة";
           dataGridView1.Columns[3].HeaderText = "التاريخ";
           dataGridView1.Columns[4].HeaderText = "نوع الكتاب";
           dataGridView1.Columns[5].HeaderText = "العنوان";
           dataGridView1.Columns[6].HeaderText = "الملاحظات";
           dataGridView1.Columns[7].HeaderText = "اسم الملف";
           dataGridView1.Columns[8].HeaderText = "نسخة الملف";
           dataGridView1.Columns[8].Visible = false;

           //تعبئة الكومبوكس
           comboBox1.DataSource = dt;
           comboBox1.DisplayMember = "Organization";
           // عمل بوتون

           DataGridViewButtonColumn btn = new DataGridViewButtonColumn();
           btn.HeaderText = "المرفقات";
           btn.Text = "الملف";
           btn.UseColumnTextForButtonValue = true;
           dataGridView1.Columns.Add(btn);

       }
       void shamas()
       //تعبئة الكومبوكس
       {
          // Da = new SqlDataAdapter("select * from TB_In ", con);
         //  Da.Fill(dt);
          // comboBox1.DataSource = dt;
          //comboBox1.DisplayMember = "Organization";
        //   comboBox1.ValueMember = "Id";


       }      
       private void In__Load(object sender, EventArgs e)
       {

       }

       private void label6_Click(object sender, EventArgs e)
       {

       }

       private void but_out_Click(object sender, EventArgs e)
       {
           this.Close();
       }

       private void but_new_Click(object sender, EventArgs e)
       {

           text_Id.Clear();
           text_Number.Clear();
           text_Title.Clear();
           text_Notes.Clear();
           comb_Type.Text = "";
           comboBox1.Text = "";
           groupBox1.Enabled = true;
           but_Save.Enabled = true;
           but_add.Enabled = true;
           

           teba();
         






       }

       void teba()
           // ترقيم تلقائي
       {
           SqlCommand cmd = new SqlCommand("select ISNULL (MAX(Id)+1,1) from  TB_In", con);
           con.Open();
           SqlDataReader Ra = cmd.ExecuteReader();

           Ra.Read();
           text_Id.Text = Ra[0].ToString();
           Ra.Close();
           con.Close();
       }
       private void but_Save_Click(object sender, EventArgs e)
       {
           //كود الملأ الاجباري
           if (comboBox1.Text == "" || text_Number.Text == "" || dateTimePicker1.Text == "" || comb_Type.Text == "" || text_Title.Text=="")
           {
               MessageBox.Show("الرجاء ملأ جميع الحقول");
           }
           else
           {

               OpenFileDialog dlg = new OpenFileDialog();
               DialogResult dlgRes = dlg.ShowDialog();
               if (dlgRes != DialogResult.Cancel)
               {
                   byte[] barray = System.IO.File.ReadAllBytes(dlg.FileName);
                   //extract the filename only from the selected path
                   string filename = System.IO.Path.GetFileName(dlg.FileName);

                   try
                   {

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

                       //إقرا الملف

                       // create sql parameters

                       con.Open();

                       cmd.ExecuteNonQuery();

                       //MessageBox.Show("تم الحفظ النص");
                   }
                   catch (SqlException ex)
                   {
                       MessageBox.Show("تم الحفظ" + ex.Message);

                   }

                   finally
                   {
                       con.Close();
                       //ward();


                   }
                   text_Id.Text = "";
                   comboBox1.Text = "";
                   text_Number.Text = "";
                   comb_Type.Text = "";
                   text_Title.Text = "";
                   text_Notes.Text = "";
                   teba();
               }
           }
       }
       

       private SqlCommand SqlCommand(string p, SqlConnection con)
       {
           throw new NotImplementedException();
       }

       //void ward()
       //{
       //for (int i=0; i< listView1.Items.Count;i++)
       //{
       //    SqlCommand cmd =new SqlCommand("Insert into TB_In (FileData,FileName,FileType) values(@fd,@fn,@ft",con);
       //    cmd.Parameters.AddWithValue("@fd",File.ReadAllBytes(listView1.Items[i].SubItems[0].Text));
       //    cmd.Parameters.AddWithValue("@fn",listView1.Items[i].SubItems[1].Text);
       //    cmd.Parameters.AddWithValue("@ft",listView1.Items[i].SubItems[2].Text);
       //    //con.Open();
       //    cmd.ExecuteNonQuery();
       //   con.Close();
       ////}
       //    MessageBox.Show("تم الحفظ الملف");

       //}
       
     
       private void button1_Click()
       {
           throw new NotImplementedException();
       }

    //       cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int)).Value = text_Id.Text;
      //     cmd.Parameters.Add(new SqlParameter("@Number", SqlDbType.VarChar)).Value = comboBox1.Text;
        //   cmd.Parameters.Add(new SqlParameter("@Organization", SqlDbType.VarChar)).Value = text_Number.Text;
           //  cmd.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime)).Value = dateTimePicker1.Value;
           //cmd.Parameters.Add(new SqlParameter("@Type", SqlDbType.VarChar)).Value = comb_Type.Text;
           //cmd.Parameters.Add(new SqlParameter("@Title", SqlDbType.VarChar)).Value = text_Title.Text;
           //cmd.Parameters.Add(new SqlParameter("@Notes", SqlDbType.VarChar)).Value = text_Notes.Text;
           //con.Open();
           //cmd.ExecuteNonQuery();
           //con.Close();
         


          // cmd = new SqlCommand("TB_In", con);
          // cmd.CommandType = CommandType.StoredProcedure;

          // SqlParameter[] param = new SqlParameter[7];
       //    param[0]=new SqlParameter("@Id",SqlDbType.Int);
         //  param[0].Value=text_Id.Text;
          // param[1] = new SqlParameter("@Number", SqlDbType.VarChar, 50);
          // param[1].Value = comboBox1.Text;
           //param[2] = new SqlParameter("@Organization", SqlDbType.VarChar, 50);
           //param[2].Value = text_Number.Text;
           //param[3] = new SqlParameter("@Date", SqlDbType.DateTime);
           //param[3].Value = dateTimePicker1.Text;
           //param[4] = new SqlParameter("@Type", SqlDbType.VarChar, 50);
           //param[4].Value = comb_Type.Text;
           //param[5] = new SqlParameter("@Title", SqlDbType.VarChar, 50);
           //param[5].Value = text_Title.Text;
           //param[6] = new SqlParameter("@Notes", SqlDbType.VarChar, 50);
           //param[6].Value = text_Notes.Text;
          // cmd.Parameters.AddRange(param);
           //con.Open();
           //cmd.ExecuteNonQuery();
           //con.Close();

         




       

       private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
       {

       }

       private void but_add_Click(object sender, EventArgs e)
     
           {


           
               //FolderBrowserDialog opendlg = new FolderBrowserDialog();
               //if (opendlg.ShowDialog() == DialogResult.OK)

               //{

           //        folder = opendlg.SelectedPath;
           //    }

           //foreach(DataRow dr in dt.Rows)
           //{
           //    string file_name = dr["FileName"].ToString();
           //    string file_type = dr["FileData"].ToString();
           //    string full_file_name =  file_type;
           //    byte[] data = dr["FileData"] as byte[];

           //    File.WriteAllBytes(folder +"\\" + full_file_name, data);

           //}
           //MessageBox.Show("تم التحميل");

               // cmd = con.CreateCommand();

               //try
               //{
               //    con.Close();
               //    con.Open();
               //    cmd.CommandText = "insert into TB_In (data) values (@data_file)";
               //    cmd.ExecuteNonQuery();


               //    con.Close();
               //}
               //catch (SqlException ex)
               //{
               //    MessageBox.Show(ex.Message);
               //}




               //try
               //{
               //    int f1 = 0;
               //    string p1;
               //    //p1 = openFileDialog1.FileName;
               //    FileStream fs = new FileStream(p1, FileMode.Open);
               //    byte[] buffer = new byte[fs.Length];
               //    fs.Read(buffer, 0, (int)fs.Length);
               //    fs.Close();
               //    string query = "insert into TB_In (data) values (@data_file)";
               //    SqlCommand com = new SqlCommand(query, con);
               //    com.Parameters.AddWithValue("@data_file", buffer);
               //    con.Open();
               //    com.ExecuteNonQuery();
               //    {
               //        f1 = 1;
               //    }
               //    if (f1 == 1)
               //    {
               //        MessageBox.Show("File saved into database");
               //    }
               //}
               //catch (Exception e1)
               //{
               //    MessageBox.Show(e1.Message);
               //}
             
           
           
           
           
           
           
           //OpenFileDialog opn = new OpenFileDialog();
           //opn.Multiselect = true;
           //if (opn.ShowDialog() == DialogResult.OK)
           //{
           //    foreach (string p in opn.FileNames)
           //    {
           //        ListViewItem itm = new ListViewItem(p);
           //        itm.SubItems.Add(Path.GetFileNameWithoutExtension(p));
           //        itm.SubItems.Add(Path.GetExtension(p));
           //        listView1.Items.Add(itm);


           //    }
           //}
       }


           



   
         
     





     

       public string p { get; set; }

       public string P { get; set; }

       private void groupBox1_Enter(object sender, EventArgs e)
       {

       }

       internal static void show()
       {
           throw new NotImplementedException();
       }

       private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
       {
           if (e.ColumnIndex ==9)
           {
               Frm_priv_user1 shams = new Frm_priv_user1();
               shams.Show();
           }
       }

       public string pa { get; set; }
   }
   }
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

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

لنقول الان انك تقوم بعمل تحويل الملف اى كان الامتداد من امتتداد حسب الملف الى 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());

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

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

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: رسول555 , sendbad100
#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());

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

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

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

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

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


الملفات المرفقة صورة/صور
       
الرد }}}
تم الشكر بواسطة:
#4
الشكر لله والحمد لله
والحمد لله على كل حال

فى البداية الاكواد التى بالشرح لا يعنى ان تقوم بتطبيقها كلياً واستخدامها
فمثلاً كما فى الصورة انت وصلت لتمكنت من عرض اسم الملف والمسار كا رسالة

فبدلاً من هذا السطر لظهور رسالة وهو 
كود :
MessageBox.Show(Patch);

تقوم باستخدام السطر التالى
كود :
System.Diagnostics.Process.Start(Patch);

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

اتمنى لو ترفق المشروع مع سكربت لقاعدة البيانات
حتى اقوم بوضع الكود داخل الزر لتوضح الصورة معك كاملاً

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: رسول555
#5
شكرا جزيلا لك اخي العزيز هذه نسخة المشروع مع الشكر


الملفات المرفقة
.rar   banat_alhssan.rar (الحجم : 673.25 ك ب / التحميلات : 45)
الرد }}}
تم الشكر بواسطة:
#6
هذه صورة لقاعدة البيانات علما اني ادرجت نسخة من القاعدة مع المشروع


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#7
الشكر لله والحمد لله
والحمد لله على كل حال

فى البداية السورس يبدو انك حاولت ان تقوم بحذف كل من الشاشات بالمشروع
ولكن لم يتم حذفها بشكل صحيح وكذلك انت قمت بارفاق نسخة احتياطية من قاعدة البيانات
وليست قاعدة البيانات نفسها على اى حال بعد رؤية الصور مع الاكواد المستخدمة فى الشاشة بالمشروع

فكل ما اتمكن من افادتك به لتنفيذ الامر هو التالى

تعال فى حدث : but_add_Click واجعل الكود به بهذا الشكل
كود :
           // جلب بيانات المرفق
           var IDNum = dataGridView1.Rows[DgId].Cells[0].Value;
           cmd = new SqlCommand("SELECT FileName, FileData FROM TB_In WHERE Id = " + IDNum, con);
           Da = new SqlDataAdapter(cmd);
           Da.Fill(dt1);

           string[] fi = dt1.Rows[0]["FileName"].ToString().Split('.');
           byte[] runFile = (byte[])dt1.Rows[0]["FileData"];
           string Patch = System.IO.Path.GetTempPath() + dt1.Rows[0]["FileName"];

           System.IO.File.WriteAllBytes(Patch, runFile);
           System.Diagnostics.Process.Start(Patch);
           MessageBox.Show("تم فتح الملف");

الان ناتى فى خطوة مهمة لمعالجة الخطاء بالكود فى السطر الاول وهو خاصة DgId

ولحل هذا كل ما عليك اضافة هذا السطر
كود :
       public int DgId { get; set; }

فى اى مكان تريد اضافته فكما تشاء
وبالنهاية ناتى للنقطة الاخير وقبل الحفظ واختبار الامر

وهو اضافة الكود التالى فى هذا الحدث : dataGridView1_CellClick
كود :
           DgId = e.RowIndex;


شرح كل جزء ...

بخصوص DgId تم تعريفه انه من نوع رقم
من ثم فى حدث dataGridView1_CellClick تم تعريف قيمة DgId بقيمة رقم الصف من الداتا جريد
بحيث كلما تم الضغط على اى مكان فى الصف او تم تحديد الصف يتم جلب هذه القيمة لـ DgId
وبالنهاية فى حدث الزر وهو but_add_Click تم عمل استعلام لجلب ملف المرفق ومن ثم تكوين الملف بالجهاز ومن ثم فتحه

طبعاً كان بامكان استغناء من كود الاستعلام وبما انك بالفعل قمت بعمل جلب جميع محتوى الملف
وقمت بتعبئته بالداتا جريد مع اخفاء عمود المرفقات كما فى كود السورس فبامكانك ان تستفاد بان يكون كود الزر

وهو خاص بحدث : but_add_Click على هذا الشكل
كود :
           byte[] runFile = (byte[])dataGridView1.Rows[DgId].Cells[8].Value;
           string Patch = System.IO.Path.GetTempPath() + dataGridView1.Rows[DgId].Cells[7].Value;
           System.IO.File.WriteAllBytes(Patch, runFile);
           System.Diagnostics.Process.Start(Patch);
           MessageBox.Show("تم فتح الملف");

حيث ان رقم 7 يشير الى اسم الملف مع الامتداد الخاص به
وكذلك رقم 8 يشير الى الملف المرفق بقاعدة البيانات

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

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة:
#8
شكرا لك اخي العزيز وانا ممتن لك كثيرا لكن لا اعلم اين المشكلة لان في كل مرة احاول فتح الملف المخزن لا يمكن هل المشكلة في القاعدة ام في المشروع قد ارفقت المشروع كامل مع القاعدة مع الشكر


الملفات المرفقة
.rar   banat_alhssan.rar (الحجم : 1.87 م ب / التحميلات : 31)
الرد }}}
تم الشكر بواسطة:
#9
مرحباً اخى رسول555

اتمنى مراجعة الرابط التالى ستجد به ما تريده تماماً

اتمنى ان يكون الشرح داخل السورس مبسط وبدون اى متاهة به

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: حريف برمجة , رسول555
#10
Heart Heart بارك الله في جهودكم المباركة وجعله في ميزان حسناتكم Heart  Heart
كم انت متالق يامبدع
الرد }}}
تم الشكر بواسطة: elgokr


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  هل الكود هذا صحيح خاص بالربط مع قاعدة بيانات SQL server تركي احمد 1 853 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,108 04-10-22, 11:15 AM
آخر رد: رضوان الجماعي
Sad [C#.NET] تطبيق الويندوز لا يستطيع تحديد قاعدة البيانات المثبتة معى التطبيق عند تشغيله على حاسو Kamel Soltani 1 1,119 03-10-22, 04:09 PM
آخر رد: asemshahen5
  [سؤال] حول تكرار البيانات في نفس التاريخ sher 2 1,172 21-06-22, 12:07 PM
آخر رد: sher

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


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