![]() |
|
Collection & DataBase Part 2 - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : Collection & DataBase Part 2 (/showthread.php?tid=13864) |
Collection & DataBase Part 2 - silverlight - 02-12-15 السلام عليكم ورحمة الله وبركاته مقدمــــة: الهدف من الموضوع هو بناء Collection تدعم الداتا بيز في الجزء الأول Collection & DataBase Part 1 تم توضيح كيفية بناء Collection من الصفر لكن وبما أن الدوت نت به الكثير من Collection وبها صفات أفضل كثيرا مما كتبناه سابقا في الجزء الأول لذلك ومن الأفضل أن نستخدم بعضا من Collections المتاحة لنا في الدوت نت و بالتالي هذا سيوفر علينا الكثير من الجهد والوقت في أي برامج داتا بيز نحتاج الي تخزين بيانات بأشكال مختلفة علي سبيل المثال نحتاج الي تخزين بيانات اسعار او معاملات تجارية او بيانات شخصية او بيانات عامة او بيانات خاصة بالشركات و المؤسسات و الأفراد عموما مهما كان شكل المدخلات التي نريد الاحتفاظ بها و تخزينها فإن الاسلوب المستخدم سيظل واحدا مهما اختلفت التقنية المستخدمة في تخزين البيانات وبدلا من الجديث النظري ولتوضيح الأمر قليلا سنعطي مثالا توضيحيا مثال: لنفترض ان هناك شركة ما تريد تخزين بيانات الموظفين و العاملين بها وهه البيانات عبارة عن إسم الموظف - الراتب الشهري - تاريخ الإلتحاق بالشركة - صورة شخصية للموظف و أشياء أخري من هذه الأمور لذلك نحن نحتاج الي كلاس سيكون الهدف منه إدخال البياات الي الداتا بيز و هذا الكلاس سوف نطلق عليه الإسم Person وبما ان الشركة ليس بها موظفا واحدا وربما عدد موظفيها قد يتعدي المئات أو الالاف من الأشخاص لذلك نحن هنا نحتاج إلي Collection نخزن بها البيانات الخاصة بكل شخص اأو نخزن بها المدخلات و لسوف نطلق علي هذه Collection الإسم PersonCollection الكلاس Person هذا الكلاس مثله مثل اي كلاس سيكون له Constructor و سيكون به بعض Property تعبر عن المدخلات الخاصة بكل شخص لكن يتبقي بعض الاسئلة الهامة جدا وهي كالتالي و يجب ان نضع في الاعتبار ان الاجابة علي هذه الاسئلة سيؤثر علي شكل الكود الخاص بالكلاس : 1- هل نريد الاحتفاظ بصورة لكل موظف؟ إن كانت الإجابة نعم إذن هذا الكلاس يجب أن يدعم IDisposable Interface 2- كيف يتم التفريق بين المدخلات الخاصة بكل بالموظفين ؟ في الداتا بيز التقليدية مثل SQL سنجد ان أي ملف نقوم ببنائه يكون به مفتاح خاص وهذا المفتاح يتم استخدامه لإعطاء رقم متفرد لكل موظف وغالبا هذا المفتاح الهدف منه هو تسهيل عمليات البحث و الفلترة للموظفين وبشكل مبدئي الكلاس Person سيكون به مدخلات بسيطة مثل إسم الشخص و المفتاح الخاص بهذا الشخص و رقم التليفون و صورة لهذا الشخص و لاحقا وكلما تقدمنا في الموضوعات التي تناقش نفس فكرة المقال سوف نضيف للكلاس بيانات اخري. و هنا لننظر للأمر قليلا و نتساءل هل يجب ان يقوم المستخدم بإدخال رقم يتم استخدامه بمثابة مفتاح لكل شخص ام يجب علينا أن نضيف هذا المفتاح بشكل اتوماتيكي بحيث يكون له ارتباط باسم الشخص الخياران متاحان و الأمر بالنهاية متروك للمبرمج عموما الفكرة المستخدمة في كيفية صناعة مفتاح متفرد لكل شخص يتم إدخال بياناته يمكن تطويرها و استخدامها لتوليد SerialNo لحماية البرنامج. الدوال التالية توضح كيفية توليد رقم يمكن استخدامه كنوع من المفتاح للتعريف عن كل شخص و علي فكرة انا لم أخترع شيئاجديدا فقط أنا قرأت الأمثلة الموجودة في مواقع مايكروسوفت و اخذت منها و قمت ببناء الدوال بما يتناسب مع احتياجات الموضوع الذي نتحدث عنه و الدول يمكن كتابتها في كلاس منفصل او يمكن اضافتها للكلاس Person و الأمر متروك للمبرمج يجب إضافة فضاء الاسماء System.Numerics لكي تعمل الدول بدو أخطاء PHP كود : Friend Function GenerateKeyLINQ(value As String) As Stringعموما الدالتان أعلاه تؤديان نفس الغرض و عليك فقط ان تستخدم احدهما أيضا وفي المرفقات ستجدون مثالا لكيفية استخدام هذا الدوال في توليد ارقام يمكن استخادمها لحماية برامجنا كودالكلاس Person PHP كود : Imports System.Numericsكيف نستخدم الأكواد أعلاه مع الفورم و الكونترول الموجودة علي الفورم وذلك بدون بناء Collection من الصفر اولا : داخل الفورم نقوم بتعريف متغير يعبر عن اي Collection أو Generic List الموجودة بكثرة في الدوت نت و هنا سوف استخدم Generic List PHP كود : Private persons As New List(Of Person) لكن قبل ان نفعل اي شئ بالكود نحن هنا نحتاج الي ايجاد شخص ما داخل Generic List لذلك نحن نحتاج الي أن نكتب بعض الدوال التي سوف تساعدنا علي ايجاد أي شخص موجود في Generic List الدوال التالية توضح كيف نقوم بإيجاد شخص ما باستخدام LINQ و الكود يوضح ايضا طريقة اخري لكي نفعل هذا PHP كود : ' You may use LINQ to find the person by his nameثانيا: نقوم بإضافة بعض الاشخاص الي Generic List و ذلك في الحدث Load الخاص ب الفورم PHP كود : Dim p1 As Person = New Person("Ahmed Reda", Nothing, "01099999999")ثالثا: نعرض البيانات في اي كونترول مثل ListBox PHP كود : For Each p As Person In personsالان كيف نربط البيانات مع الداتا جريد فيو يمكننا ان نستخدم اي اسلوب نراه مناسباأو من الأفضل و الاسهل لنا هو أن نقوم بتحويل البيانات الموجودة في Generic List الي Data Table لتكون بمثابة Data Source للداتا جريد فيو كيف نقوم بتحويل Generic List التي تم تعريفها اعلاه في الكود الي Data table الكود التالي يوضح كيف نفعل ذلك PHP كود : Friend Function PersonsToDataTable() As DataTableطبعا و بدلا من ان نكتب كل هذه الأكواد في الفورم من الأسهل لنا أن تبني Collection خاصة و هذا سوف يقوم بتسهيل عمليات الحذف و البحث و خلافة وهذا ما سنوضحه في الجزء الثالث إن شاء الله قد يتساءل البعض أليس من الأسهل استخدام LINQ to SQL or LINQ to XML بالطبع نعم أسهل ويمكن عمل ذلك بكل بساطة لكن بعض الفئات من المبرمجين يفضلون بناء كل شئ ب أنفسهم و مايكروسوفت تركت جميع الخيارت متاحة طبقا لرؤية كل مبرمج في المرفقات ستجدون جميع الاكواد اعلاه بنسخة الفيجوال استوديو 2012 مع تحياتي بالتوفيق للجميع |