|
الدرس 14 ADO.Net
|
|
11-26-2009, 02:11 AM
(اخر تعديل لهذه المشاركة : 01-26-2010 07:37 AM بواسطة مصطفى الشريف.)
مشاركات: #1
|
|||
|
|||
|
الدرس 14 ADO.Net
السلام عليكم وكل عام وانتم بخير..
تحدثنا فيما مضى عن تنفيذ الاستعلامات التي تعود بجداول و قلنا انه يجب ان نستعمل الفصيله DataReader من اجل قرائه نتيجه الاستعلام . لكن اوضحنا ان ال Data reader لها عيوب منها عدم امكانيه ربطها بأدوات التحكم المختلفه الا بعد اعاده تخزين عناصرها في متغيرات اخرى مصفوفات مثلاً او جداول بيانات.. كذلك تعرفنا على الكائن OleDbCommand الذي يمكنا من تنفيذ الاستعلامات على قاعده البيانات من اجل الاضافه و النعديل و الحذف... اليوم سنتعامل مع اسلوب مختلف للتعامل مع قواعد البيانات : الا وهو التعديل المتأخر حيث يتم استدعاء قاعده البيانات مره واحده ويتم الاحتفاض بمجموعه جداول و علاقات بين الجداول في الRam ليتم التعامل مع الجدول بشكل وهمي لحين الانتهاء من التعامل معها و التعديل بها , فيتم تطبيق التغيرات على مصدر الجداول في قاعده البيانات. 1-DataSet هي مكون مستقل من مكونات اطار.net فتسطيع احتواء و التعامل مع اي جداول بيانات و العلاقات بينهم بشكل وهمي حيث ان: الهدف الرئيسي منها هو الاحتفاض بمجموعه جداول و علاقات بين الجداول في الRam ليتم التعامل مع الجدول بشكل وهمي لحين الانتهاء من التعامل معها و التعديل بها , فيتم تطبيق التغيرات على مصدر الجداول. اذن اذا كانت ال data set غير متصله بقاعده البيانات فمن المسؤل عن جلب الجداول ثم اعاده ارسال الجداول المعدله الى قاعده البيانات ..؟؟؟ الاجابه عن هذا السؤال تكون في الفصيله Data Adapters -2 يمكن التفكير في ال data adapters كجسر بين قاعده البيانات و ال Data Set بدون ال data adapters لن تستطيع ال Data set الاتصال بقاعده البيانات او التعديل عليها لكن ذلك من مهام ال data adapters. الصوره التاليه توضح طريقه عمل ال Data Adapters ![]() اما الصوره التاليه توضح ال Data set ![]() ____________________________________________________ سنحاول الان تطبيق الربط بين قاعده البيانات و ال data adapters ثم ربطها بال DataSet ابدأ مشروع جديد وفي حدث التحميل الخاص بالفورم ادخل الكود التالي PHP كود: Dim Connection1 As New OleDb.OleDbConnectionيبدئ الكود بتعريف كائن اتصال OleDbConnection ذلك لان الDataAdapter يحتاج اتصال فعال بقاعده البيانات.. ثم نعرف كائن من نوع OleDbDataAdapter واّخر من النوع DataSet واّخر من النوع DataTable واّخر من النوع DataRow واّخر من النوع DataColumn ثم نبدأ بعد ذلك بالاتصال بقاعده البيانات Employees نبدأ بعد ذلك استخدام الكائن OleDbDataAdapter لاحظ الكائن OleDbDataAdapter له ثلاث خصائص اساسيه 1-select command :اذا كنت تريد تنفيذ استعلام يعود بقيمه ولا يغير البيانات 2-Update command : اذا كنت تريد اعاده تعديل سجل ما.. 3-Inset command : اذا كنت تريد اضافه سجل 4- Delet command : اذا كنت تريد حذف سجل لا حظ اننا استخدمنا DAEmployee.SelectCommand اي اننا نريد التعامل مع الجدول بالطريقه الاولى.. لاحظ اننا حددنا كائن امر جديد لل OleDbDataAdapter من خلال الكود التالي كود: DAEmployee.SelectCommand = New OleDb.OleDbCommandثم حددنا نص الاستعلام كالتالي كود: DAEmployee.SelectCommand.CommandText = "Select * from EmployeeData"ثم حددنا الاتصال للكائن OleDbDataAdapter كالتالي كود: DAEmployee.SelectCommand.Connection = Connection1الى الان اتى وقت ملئ حاويه البيانات (الفصيله DataSet ) من خلال استدعاء الاسلوب Fill الخاص بالكائن Data Adapter كود: DAEmployee.Fill(DS1, "EmployeeData")لاحظ اننا قمنا بملئ الكائن DataSet مع تحديد اسم للجدول EmployeeData ألجدير بالذكر انه كان ممكن عدم ذكر اسم الجدول وسيتم تسميته بشكل اّلي في الData set بحسب ترتيب اضافته كالتالي كود: DAEmployee.Fill(DS1)الاّن الكائن DataSet يحتوي على جدول اسمه "EmployeeData" او اذا لم تقم بتحديد اسم الجدول كنت ستشير له بالرقم الذي يرمز لترتيبه... لعرض بيانات الجدول سنقوم بتنفيذ الكود التالي لاحظ ان الجدول يتكون من اعمده رئيسيه Column > تندرج تحتها صفوف Row ايضاً لاحظ قمنا بتعريف كائن من النوع DataRow و اّخر من النوع DataColumn الان كود عرض بيانات الجدول كود: For Each Row1 In DS1.Tables("EmployeeData").Rowsحيث بدأنا بنظام تكرار بعدد الصفوف الموجوده بالجدول = سجلين 2 ثم نظام تكراري بعدد الاعمده = 5 حقول (اسم وسن.....) وعرضنا رساله توضح محتوى السجل.. يعني مثلاً يمكنني عرض اسم الموضف الموجود بالسجل الثاني كالتالي كود: MsgBox(DS1.Tables("EmployeeData").Rows(0).Item("EmployeeName"))نكتفي بهذا اليوم لتعرف فيما بعد على كيفيه تعديل البيانات في ال DataSet 01100001-00101101-01101100-00101101-01101100-00101101-01100001-00101101-01101000
|
|||
|
|
11-27-2009, 09:00 PM
(اخر تعديل لهذه المشاركة : 02-27-2010 05:50 PM بواسطة مصطفى الشريف.)
مشاركات: #2
|
|||
|
|||
|
السلام عليكم
تعديل البيانات في نموذج التعديل المتأخر لاحظ اننا سنقوم بتعديل البيانات في ال DataSet ولم نقوم بأعاده ارسال البيانات الى مصدر البيانات او ال Data Adapter مما يعني عدم تطبيق التغيرات بالفعل لكن سيتم اجراء التعديلات بشكل وهمي على ال Data set ثم يتم ارسال التعديل لل Data Adapter ليتم تعديل قاعده البيانات اذا لم تكن مرتاح في التعامل مع نموذج التعديل المتأخر من خلال ال DataSet و DataAdapter ...فأنت تعرف كيفيه تطبيق الاستعلامات المختلفه من خلال الفصيله OleDbCommand المذكوره في الدرس السابق....لكن انصحك بالمتابعه لكيفيه معرفه ربط الجداول مع عناصر التحكم مثل صندوق النص ... 1-تعديل البيانات في ال DataSet ابدأ مشروع جديد وادخل الكود التالي في حدث التحميل بالفورم PHP كود: Dim Connection1 As New OleDb.OleDbConnectionالكود يقوم بتعديل الصف الاول Row(0) العمود EmployeeName من خلال الكود التالي مقتبس: DS1.Tables("EmployeeData").Rows(0).Item("EmployeeName") = "محمد" لاحظ انه ممكن اضافه صف جديد من خلال الكود التالي PHP كود: Add new rowحيث تم استدعاء اسلوب DS1.Tables("EmployeeData").NewRow()الذي يقوم بانشاء صف جديد. والاسلوب (Rows.Add(newRow الذي يضيف الصف لمجموعه الصفوف بالجدول. اذكر بأن التغيرات التي قمنا بها لن تؤثر على قاعده البيانات لأننا لم نطلب من ال DataAdapter اعاده ارسال التغيرات الى قاعده البيانات... ما سنحاول فعله الان هو تطبيق التغيرات الى مصدر البيانات.. ارسال التغيرات الى قاعده البيانات: الكائن DataAdapter يحتوي على ثلاث اساليب تمثل كافه التغيرات التي ممكن تقوم بتنفيذها على قاعده البيانات. UpdateCommand InsertCommand DeleteCommand حيث يستقبل كل منهم جمله الاستعلام التي من المفترض تنفيذها على قاعده البيانات. ويتم بعد تخصيص جمله الاستعلام استدعاء الاسلوب Update الخاص بالكائن DataAdapter سنتعامل الان مع فصيله توفر علينا كتابه الاستعلامات الازمه لتعديل قاعده البيانات وهي Command Builder تلك الفصيله تحتاج الى Data Adapter جاهز لتوفر له الاستعلامات .. مثال من اجل تطبيق التغيرات التي عملتها على ال DataSet استخدم الكود التالي PHP كود: Dim Connection1 As New OleDb.OleDbConnectionحيث عرفنا متغير من نوع OleDb.OleDbCommandBuilder كالتالي كود: Dim command1 As New OleDb.OleDbCommandBuilderثم حددنا ال DataAdapter للكائن command1 كالتالي command1.DataAdapter = DAEmployee ثم استدعينا الاسلوب DAEmployee.Update(DS1, "EmployeeData") لتطبيق التغيرات لاحظ انه و للأسف الفصيله Command Builder لابد ان تربط بDataAdapter يحتوي على جمله استعلام تحتوي على عمود Identity او Primary Key بشكل عام قم بتحديد جمله استعلام تعديل او حذف البيانات من خلال ال DataAdapter. <<<<<<<<<<<<<<<<<<<<ارجوا التركيز على هذه النقطه حيث اننا نستخدم ال Data Adapter للأتصال بقاعده البيانات يقوم ال DataAdapter بتعديل البيانات من خلال تنفيذ اوامر SQL عاديه ويحتوي ال Data adapter على 4 قيم تمثل عميله تنفيذ اوامر SQL وهي Insert Command Update Command Select Command Delete Command لاحظ ان كل منها يجب ان تحتوي على امر SQL مناسب.. وقلنا انه يمكن الاستعانه بفصيله اسمها Command Builder من اجل توليد اوامر SQL المناسبه... يتم عمل ذلك من خلال الكود التالي CommandBuilder1.DataAdapter = EmployeeDataAdapter حيث ان الفصيله Command Builder تحتوي خاصيه اسمها DataAdapter لكن لن تقوم تلك الفصليه بتوليد اوامر التعديل و مسح السجلات الا من خلال توفير عمود ID بقاعده البيانات لاحظ انه يمكن ضبط الجدول الموجود بال Data Adapter لكي يحتوي على عمود ID دون عمل ذلك بقاعده البيانات... لذلك غالباً سنقوم بتوفير اوامر الSQL الخاصه بتعديل و حذف البيانات يدوياً... تذكر انه يمكنك دائماّ تعديل قاعده البيانات مباشره بأستخدام Data command واسخدام ال DataAdapter فقط لجلب الجدول و ربطه بال Data set . لكني انصحك بشششششششده على تعلم كيفيه تنفيذ الاستعلامات على ال DataAdapter ...فقط عند التعامل بالادوات المرئيه في ال Visual studio>> |
|||
|
|
|






