موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176) +--- الموضوع : موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات (/showthread.php?tid=31482) الصفحات:
1
2
|
موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - Rabeea Qbaha - 24-09-19 السلام عليكم
كمبرمج حر كاغلب البقية هنا دائما اسعى لكتابة الكود بافضل طريقة ممكنة، للتعلم بشكل صحيح والتطور الدائم
اليوم موضوعي عن طريقة الاتصال بقاعدة البيانات.
في السابق كنت استحدم كلاس فية جملة الاتصال و اقوم باستدعاء هذا الكلاس في الفورم او الكلاس المراد كالاتي :
PHP كود : using System.Configuration; وهي طريقة مريحة وفعالة واستخدمها في العادة.
لكن من فترة وبداعي الفضول لاكواد مختلفة مررت على فيديو باليوتوب يشرح فية الاتصال بقاعدة البيانات
ويستخدم SingletonHelper و يقوم باستنساخ الاتصال لعدم مناداة الاتصال كل مرة في حال كان عدد مستخدمين كثرة
لكي لا يستهلك موارد السيرفر والطريقة كالاتي : PHP كود : using System.Configuration; لكن لاحظت انة في الطريقة الاولى البرنامح اسرع قليلا في عمليات الاضافة و التعديل.
هل من احد لدية خبرة او معلومة من هي الطريقة الانسب والافضل ؟؟
RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - issamsaidd - 24-09-19 اخى الكريم كل الطرق تودى الى روما انا لما اشتغل قاعدة لوكل استخدم هذا الربط للاتصال هذا الكود OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bbc.accdb;jet oledb:database password=1234"); OleDbCommand cmd; وبعذ ذلك المنادة من الجدول public void fulldata() { OleDbDataAdapter da = new OleDbDataAdapter("select * from issam", con); DataTable dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; 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[9].HeaderText = "العمل"; dataGridView1.Columns[10].HeaderText = "الدخل"; dataGridView1.Columns[11].HeaderText = "وضع الاسرة"; dataGridView1.Columns[12].HeaderText = "التحويل"; dataGridView1.Columns[13].HeaderText = "رقم الجوال"; dataGridView1.Columns[14].HeaderText = "ملاحظات"; dataGridView1.Columns[15].HeaderText = "مستخدم"; } ولا تنسى وضعها فى بداء التشغيل المنادة فى بداية تشغيل الفورم وكود الحفظ كا الاتى cmd = new OleDbCommand("Insert Into issam (xid,xname,xsex,XDATE,xsocial,xNbewives,xnbechild,xEducation,xAddress,xjob,xsalary,xFastate,xtransfer,xnumber,xnotes,xuser)values(@id,@name,@sex,@date,@social,@Nbewives,@nbechild,@Education,@Address,@job,@salary,@Fastate,@transfer,@number,@notes,@user)", con); cmd.Parameters.AddWithValue("@id", txtid.Text); cmd.Parameters.AddWithValue("@name", txtname.Text); cmd.Parameters.AddWithValue("@sex", txtsex.Text); cmd.Parameters.AddWithValue("@date", datebr.Value.ToString("yyyy/MM/dd")); cmd.Parameters.AddWithValue("@social", txtmred.Text); cmd.Parameters.AddWithValue("@Nbewives", numwifi.Value); cmd.Parameters.AddWithValue("@nbechild", numchiled.Value); cmd.Parameters.AddWithValue("@Education", txteduction.Text); cmd.Parameters.AddWithValue("@Address", txtaddres.Text); cmd.Parameters.AddWithValue("@job", txtgop.Text); cmd.Parameters.AddWithValue("@salary", txtsalary.Text); cmd.Parameters.AddWithValue("@Fastate", txtstat.Text); cmd.Parameters.AddWithValue("@transfer", txttrnsform.Text); cmd.Parameters.AddWithValue("@number", txtphone.Text); cmd.Parameters.AddWithValue("@notes", txtnot.Text); cmd.Parameters.AddWithValue("@user", txtuser.Text); con.Open(); cmd.ExecuteNonQuery(); con.Close(); وكود التعديل كا الاتي //التعديل cmd = new OleDbCommand("update issam set xname=@name,xsex=@sex,XDATE=@date,xsocial=@social,xNbewives=@Nbewives,xnbechild=@nbechild,xEducation=@Education,xAddress=@Address,xjob=@job,xsalary=@salary,xFastate=@Fastate,xtransfer=@transfer,xnumber=@number,xnotes=@notes,xuser=@user where xid=@id", con); cmd.Parameters.AddWithValue("@name", txtname.Text); cmd.Parameters.AddWithValue("@sex", txtsex.Text); cmd.Parameters.AddWithValue("@date", datebr.Value.ToString("yyyy/MM/dd")); cmd.Parameters.AddWithValue("@social", txtmred.Text); cmd.Parameters.AddWithValue("@Nbewives", numwifi.Value); cmd.Parameters.AddWithValue("@nbechild", numchiled.Value); cmd.Parameters.AddWithValue("@Education", txteduction.Text); cmd.Parameters.AddWithValue("@Address", txtaddres.Text); cmd.Parameters.AddWithValue("@job", txtgop.Text); cmd.Parameters.AddWithValue("@salary", txtsalary.Text); cmd.Parameters.AddWithValue("@Fastate", txtstat.Text); cmd.Parameters.AddWithValue("@transfer", txttrnsform.Text); cmd.Parameters.AddWithValue("@number", txtphone.Text); cmd.Parameters.AddWithValue("@notes", txtnot.Text); cmd.Parameters.AddWithValue("@user", txtuser.Text); cmd.Parameters.AddWithValue("@id", txtid.Text); con.Open(); cmd.ExecuteNonQuery(); con.Close(); وكود الحذف كا الاتى cmd = new OleDbCommand("Delete * from issam where xid=@id", con); cmd.Parameters.AddWithValue("@id", txtid.Text); con.Open(); cmd.ExecuteNonQuery(); con.Close(); لاتنسى تبديل اسماء الجدول بجدولك ولا تمسى try RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - Rabeea Qbaha - 24-09-19 (24-09-19, 08:23 PM)issamsaidd كتب : اخى الكريم كل الطرق تودى الى روما انا لما اشتغل قاعدة لوكل استخدم هذا الربط شكرا صديقي.... لكن انت لم تفهم قصدي صديقي لو تقوم بقراءة الموضوع مرة اخرى ستفهم ما الذي احاول توصيلة RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - asemshahen5 - 28-09-19 عندي سؤال ما هي سرعة فتح الاتصال بقاعدة البيانات عندك بالاتصال الاول و الثاني . PHP كود : //جرب هذا لمعرفة الزمن المستغرق لتنفيذ كود، وبعدها تستطيع تعرف الأسرع بشكل جيد RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - Rabeea Qbaha - 30-09-19 تبين بعد تجربة الكود من الاخ asemshahen5 انة بالفعل الطريقة الاولى اسرع قليلا بالحقيقة لا اعلم اذا هذا الفارق البسيط يفرق بالاداء. RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - محمد كريّم - 30-09-19 بعيدا عن جوهر الموضوع ومن باب المشاركة منذ تعرفت على تقنية Linq2ٍSQL تركت الطريقة القديمة ado في الحقيقة ارتحت جدا من تعب كتابة الاستعلامات والبارامترات والاجراءات المخزنة والرجوع الى قاعدة البيانات في كل مرة اكتب فيها استعلام لاتأكد من اسم العمود ان كان به حرف كبير capital او لاعرف ما نوعه وغيرها من الامور المعقدة كذلك اصبح الوصول الى البيانات سهل جدا ولا يحتاج لكتابة كود كبير RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - Rabeea Qbaha - 01-10-19 لكن استخدام طريقة Linq2ٍSQL بطيئة جدا باسترداد البيانات، احد الاخوة هنا لا اذكر من قام بعمل فيديو ليبين السرعه بين الطرق الثلاثة بالاضافة الى ال dapper و كان ال dapper الاسرع وكان Linq2ٍSQL الابطئ و بفارق مخيف في الحقيقة !! RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - elgokr - 07-10-19 وعليكم السلام ورحمة الله وبركاته
انظر اخى الكريم Rabeea Qbaha
بخصوص الفرق بين الكود الاول والكود الثاني لو هختصر مباشر ممكن اقول ولا حاجة الاثنين واحد
طيب علمياً خصوصاً فى الاستخدام وطريقة التعامل
فى الكود الاول كل الامر بانه بيتم عمل الاتصال من ثم التحقق من فتح والاغلاق
فى الكود الثاني يقوم بنفس الامر بس تعال نقول ان االمر بيتم بصورة نموذجية مباشرة
طيب يعنى ايه الكلام ده عشان الامور توضح اكتر
فى الكود الاول انت عملت الكلاس بعدها عند المناداه عليها فى اى شاشة
بيتم تعريف هذا الكلاس لاستدعاء ما بداخله بحيث كمثال التالى كود : DB_Connect test = new DB_Connect(); عشان تقدر بعدها تقوم بتطبيق الكود كمثال التالى كود : test.Connection(); الاكواد بالاعلى توضح كمثال فقط وليس الامر الفعلى
طيب تعال كده لو حبيت معملش السطر الاول وفجاء انا محتاج اقول انا عايز اعمل الكود كده مباشر كود : Connection(); تفتكر الشاشة هنا هتفهم هو المقصود بيه ايه ولا هو تبع ايه بضبط
اهو الامر فى SingletonHelper هو لخص الامر ده وجعل الكلاس لا يلزم تعريفه لانه سيتم تعريفه تلقائي فى كل شاشة
بناءاً على هذا السطر كود : internal static readonly DB_Connect Instance = new DB_Connect(); فكده كانك تماماً بتيجى فى كل مرة كنت بتقوم بكتابة هذا السطر كود : DB_Connect test = new DB_Connect(); هو بيكتبه نيابتاً عنك مباشراً فبكده هتقدر تستدعي مباشراً كود : Connection(); وسيتم التعرف عليه بدون مشكلة
طيب خلينا كده نتكلم عن الامر بصورة اسهل وبشكل عام كما لو انها بالعمية
تخيل انك بتنشاء Module بدلاً من Class او انك بتحول الـ Class لـ Module
ولكي تعم الفائدة لك وللجميع يمكن مراجعة هذا الفيديو ان شاء الله هتوصل الصورة من الامر اكثر
طيب ليه بيحصل فارق زمني بسيط وقد لا تلاحظها فى الامور الكبيرة كون كما لو انه يقوم فى كل مرة كتابة كود تعريف الكلاس ليستوعبه الشاشة عند التنفيذ بشكل عامى دون توضح بشرح كبير طيب هل الامر انه بيقلل الحمل على موارد السيرفر او لا بالطبع لا لان الموارد المستهلكة ليس على كود الاتصال بال على طريقة التعامل وكتابة كود التنفيذ مثل الاستعلام بصورة اكبر عليه وياليه الاضافة والتعديل والحذف اتمنى ان تكون الصورة وضحت لك بصورة اوضح
وان لا اكون شرحت بصورة غير موضحة لتصل الفريق
تحياتى لك
وتمنياتى لك التوفيق
RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - asemshahen5 - 07-10-19 أهلا بعودتك و الحمد الله على سلامتك قد اشتقنا لك و لردودك جزاك الله عنا كل خير . RE: موضوع للنقاش !! - طرق الاتصال بقاعدة البيانات - elgokr - 08-10-19 (07-10-19, 11:45 PM)asemshahen5 كتب : أهلا بعودتك و الحمد الله على سلامتك قد اشتقنا لك و لردودك جزاك الله عنا كل خير . الله يسلمك اخى الفاضل asemshahen5
هذا من اصلك الطيب اخى الكريم جزاك الله كل خير
تحياتى لك
وتمنياتى لك التوفيق
|