اخر عشرة مواضيع بالمنتدى
80برنامج لجميع انواع الموبيلbeshoy بواسطة: beshoy sa3ed | نكت قبيحه جدا جدا ممنوع دخول البنات بواسطة: m7mod | الدكـاتـره والشنـط الـجـلـد بواسطة: m7mod | جميع أهداف الألمانى توماس موللر الذى حصل على لقب الهداف فى كأس العالم 2010 بواسطة: m7mod | تعلم كيف تتغلب علي قلة الثقة بالنفس بواسطة: mba degree | تعلم مهارات الاتصال الفعال بواسطة: mba degree | مهارات الاتصال الفعال بواسطة: mba degree | كيف تكون شخص منظم و تترك انطباع جيد عند الاخرين بواسطة: mba degree | كيف تنمي مهارة الابداع في شخصيتك بواسطة: mba degree | مهارات ااقناع بواسطة: mba degree
موضوع مغلق 
 
تقييم الموضوع:
  • 0 اصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس 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

        Dim DAEmployee 
As New OleDb.OleDbDataAdapter
        Dim DS1 
As New DataSet
        Dim Row1 
As DataRow
        Dim Col1 
As DataColumn
        
'connect to an Access DataBase
        Try
            Connection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = G:\Employees.mdb"
            Connection1.Open()

        Catch ex As Exception
            MsgBox("حدث خطأ اثناء فتح قاعده البيانات" & vbCrLf & ex.ToString)
        End Try

        DAEmployee.SelectCommand = New OleDb.OleDbCommand
        DAEmployee.SelectCommand.CommandText = "Select * from EmployeeData"
        DAEmployee.SelectCommand.Connection = Connection1

        ' 
Fill dataset
        DAEmployee
.Fill(DS1"EmployeeData")

        For 
Each Row1 In DS1.Tables("EmployeeData").Rows
            
For Each Col1 In DS1.Tables("EmployeeData").Columns
                Debug
.WriteLine(Row1(Col1))
            
Next
            Debug
.WriteLine("================NewRecord")
        
Next

        Connection1
.Close() 


يبدئ الكود بتعريف كائن اتصال 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
            For Each Col1 In DS1.Tables("EmployeeData").Columns
                Debug.WriteLine(Row1(Col1))
            Next
            Debug.WriteLine("================NewRecord")
        Next

حيث بدأنا بنظام تكرار بعدد الصفوف الموجوده بالجدول = سجلين 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
Rainbow RE: الدرس 14 ADO.Net
السلام عليكم

تعديل البيانات في نموذج التعديل المتأخر


لاحظ اننا سنقوم بتعديل البيانات في ال DataSet ولم نقوم بأعاده ارسال البيانات الى مصدر البيانات او ال Data Adapter مما يعني عدم تطبيق التغيرات بالفعل لكن سيتم اجراء التعديلات بشكل وهمي على ال Data set

ثم يتم ارسال التعديل لل Data Adapter ليتم تعديل قاعده البيانات

اذا لم تكن مرتاح في التعامل مع نموذج التعديل المتأخر من خلال ال DataSet و DataAdapter ...فأنت تعرف كيفيه تطبيق الاستعلامات المختلفه من خلال الفصيله OleDbCommand المذكوره في الدرس السابق....لكن انصحك بالمتابعه لكيفيه معرفه ربط الجداول مع عناصر التحكم مثل صندوق النص ...


1-تعديل البيانات في ال DataSet

ابدأ مشروع جديد وادخل الكود التالي في حدث التحميل بالفورم

PHP كود:
Dim Connection1 As New OleDb.OleDbConnection

        Dim DAEmployee 
As New OleDb.OleDbDataAdapter
        Dim DS1 
As New DataSet
        
        
'connect to an Access DataBase
        Try
            Connection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = G:\Employees.mdb"
            Connection1.Open()

        Catch ex As Exception
            MsgBox("حدث خطأ اثناء فتح قاعده البيانات" & vbCrLf & ex.ToString)
        End Try

        DAEmployee.SelectCommand = New OleDb.OleDbCommand
        DAEmployee.SelectCommand.CommandText = "Select * from EmployeeData"
        DAEmployee.SelectCommand.Connection = Connection1

        ' 
Fill dataset
        DAEmployee
.Fill(DS1"EmployeeData")

        
'Print the Data Before Update
        MsgBox(DS1.Tables("EmployeeData").Rows(0).Item("EmployeeName"))

        '
Modify Name in first row
        DS1
.Tables("EmployeeData").Rows(0).Item("EmployeeName") = "محمد"

        
Print the Data Before Update
        MsgBox
(DS1.Tables("EmployeeData").Rows(0).Item("EmployeeName"))

        
Connection1.Close() 

الكود يقوم بتعديل الصف الاول Row(0) العمود EmployeeName
من خلال الكود التالي


مقتبس: DS1.Tables("EmployeeData").Rows(0).Item("EmployeeName") = "محمد"

لاحظ انه ممكن اضافه صف جديد من خلال الكود التالي

PHP كود:
Add new row
        Dim newRow 
As DataRow DS1.Tables("EmployeeData").NewRow()

        
newRow("EmployeeName") = "محمود"
        
newRow("EmployeeAge") = "23"
        
newRow("EmployeeSalary") = "2000"
        
newRow("EmployeeNationality") = "مصري"
        
DS1.Tables("EmployeeData").Rows.Add(newRow

حيث تم استدعاء اسلوب 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
        Dim DAEmployee 
As New OleDb.OleDbDataAdapter
        Dim command1 
As New OleDb.OleDbCommandBuilder
        Dim DS1 
As New DataSet

        
'connect to an Access DataBase
        Try
            Connection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = G:\Employees.mdb"
            Connection1.Open()

        Catch ex As Exception
            MsgBox("حدث خطأ اثناء فتح قاعده البيانات" & vbCrLf & ex.ToString)
        End Try

        DAEmployee.SelectCommand = New OleDb.OleDbCommand
        DAEmployee.SelectCommand.CommandText = "Select * from EmployeeData"
        DAEmployee.SelectCommand.Connection = Connection1

        ' 
Fill dataset
        DAEmployee
.Fill(DS1"EmployeeData")

        
'Add new row
        Dim newRow As DataRow = DS1.Tables("EmployeeData").NewRow()
        newRow("EmployeeName") = "محمود2"
        newRow("EmployeeAge") = "23"
        newRow("EmployeeSalary") = "2000"
        newRow("EmployeeNationality") = "مصري"
        DS1.Tables("EmployeeData").Rows.Add(newRow)


        command1.DataAdapter = DAEmployee

        ' 
Update Employees table
        DAEmployee
.Update(DS1"EmployeeData")

        
Connection1.Close() 

حيث عرفنا متغير من نوع 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>>


عرض جميع مشاركات هذا العضو
موضوع مغلق 


المواضيع المحتمل ان تكون متشابهة.
الموضوع: الكاتب الردود: المشاهدات: اخر رد
Rainbow الدرس 22 Win32 API DataType مصطفى الشريف 5 553 06-30-2010 06:18 PM
اخر رد: مصطفى الشريف
Rainbow الدرس 21 Win32 API نظره للغه البرمجه C مصطفى الشريف 0 95 06-29-2010 05:32 PM
اخر رد: مصطفى الشريف
Rainbow الدرس 20 مقدمه Win32 API and .Net مصطفى الشريف 2 657 04-21-2010 03:38 AM
اخر رد: مصطفى الشريف
Rainbow الدرس 18 توزيع البرامج مصطفى الشريف 0 566 03-06-2010 12:41 AM
اخر رد: مصطفى الشريف
Rainbow الدرس 17 Crystal Report مصطفى الشريف 2 1,164 03-03-2010 05:29 PM
اخر رد: مصطفى الشريف
Rainbow الدرس 16 Crystal Report مصطفى الشريف 2 944 02-27-2010 03:42 PM
اخر رد: مصطفى الشريف
  الدرس 15 التعامل مع البيانات بشكل مرئي مصطفى الشريف 1 1,203 02-05-2010 04:27 AM
اخر رد: مصطفى الشريف
Rainbow الدرس 13 ADO.Net مصطفى الشريف 1 765 11-13-2009 06:45 PM
اخر رد: مصطفى الشريف
Rainbow الدرس 12 ADO.Net مصطفى الشريف 1 1,411 10-25-2009 12:50 AM
اخر رد: مصطفى الشريف
Rainbow الدرس العاشر التعامل مع النماذج مصطفى الشريف 0 1,135 10-03-2009 10:36 PM
اخر رد: مصطفى الشريف
Rainbow الدرس التاسع الفصائل مصطفى الشريف 2 842 09-28-2009 04:48 PM
اخر رد: مصطفى الشريف
Rainbow الدرس الثامن الدوال و الاجرائات2 مصطفى الشريف 2 1,425 09-07-2009 10:52 PM
اخر رد: مصطفى الشريف
Rainbow الدرس السابع تحويل انواع البيانات مصطفى الشريف 0 694 08-07-2009 03:37 AM
اخر رد: مصطفى الشريف
Rainbow الدرس السادس توجيه الكود مصطفى الشريف 0 640 08-03-2009 04:20 PM
اخر رد: مصطفى الشريف
Rainbow الدرس الخامس المتغيرات والثوابت وانواع البيانات2 مصطفى الشريف 0 1,035 07-18-2009 01:08 AM
اخر رد: مصطفى الشريف

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

إتصل بناشباب دمنهورالعودة للأعلىالعودة للمحتوىالأرشيفخلاصات RSS
Bookmark and Share Free counter and web stats Powered by  MyPagerank.Net