المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ADO.net


Eyad
05-01-2008, 06:16 AM
السلام عليكم :
أرجو من الله أن أكون قد وفقت في إعطاء المحاضرة التي كانت بعنوان Ado.net
مع بعض الملاحظات عليها لكن ولله الحمد جرت على خير.

تتلخص أهدفنا في التعامل مع قواعد البيانات في النقاط التالية:
1- الاتصال بمصدر قاعدة البيانات.
2- قراءة البيانات التي بها وعرضها بطرق شتى من خلال الأدوات المتوفرة في بيئةMicrosoft.NET.
3- معالجة البيانات وتحديثها من خلال تعديل قيم هذه البيانات أو إضافة بيانات جديدة أو حذف بيانات غير مرغوب فيها.
4- حفظ البيانات المحدثة.
5- الإبحار في البيانات من خلال الانتقال للسجل التالي أو ألعودة للسجل السابق أو الانتقال للسجل الأول أو الانتقال للسجل الأخير.
6- البحث عن البيانات بسهولة ويسر من خلال وضع فلاتر للترشيح.
7- ربط البيانات ذات العلاقة في أكثر من جدول وعرضها ومعالجتها.
8- طباعة التقارير الملخصة للبيانات.

الاتصال بقواعد البيانات:
للوصول إلى البيانات المخزنة في قاعدة البيانات والقراءة منها أو الكتابة فيها يجب أن نكوّن اتصال ناجح معها،
وذلك يتم من خلال كائن الاتصال المسمى Connection، ولتجهيز هذا الكائن نحتاج إلى أعطائه معلومات
عن ملف قاعدة البيانات الذي نريد أن نتصل به (من أهمها على سبيل المثال مزود البيانات وخادم البيانات
واسم ومكان قاعدة البيانات و كلمة المرور مع كلمة السر إن وجدت)، وهذه المعلومات تكوّن لنا بما يسمى سلسلة الاتصال
(Connection String) وهي عبارة عن أحد خصائص كائن الاتصال.
string ConnectionString = "Data Source=mabrokeh-3b15a6;Initial Catalog=cephalometric_Finaly;Integrated Security=True";
Connection = new System.Data.SqlClient.SqlConnection(ConnectionStri ng);

بعد التعرف على سلسلة الاتصال يجب أن نتعرف على نوعيّ طريقة الاتصال بقاعدة البيانات.

نوعيّ طريقة الاتصال بقواعد البيانات:
من الجدير بالذكر أننا لو أردنا أن نتصل على قاعدة البيانات بواسطة ADO.NET يجب أن نختار طريقة الاتصال المناسبة لاحتياجاتنا، فلدينا طرقتين للاتصال وهما الاتصال المتصل (Connection Oriented) و الاتصال المنفصل (Connectionless Oriented). ولكل منهما امتيازاته وعيوبه و إستراتجياته الخاصة به في العمل، غير أن الأخير يعتبر الأمثل في التعامل مع قواعد البيانات، وهنا بالتحديد يضيع أغلب من يرغبون تعلم برمجة قواعد البيانات من خلال ADO.NET.
والسبب في اعتقادي هو ضعف فهم الآلية التي يعمل بها كل منهما من ناحية، والخلط بينهما من ناحية أخرى. ولكي نزيل هذه المشكلة سوف نتحدث عن كل منهما بشكل مستقل.
وقبل ذلك يجب أن نوضح أمر مهم وهو: أنه عند بدأ مشروع جديد للاتصال بقاعدة البيانات يجب قبل كل شيء أن نستدعي فضاء الأسماء المناسب لمزود البيانات الذي نتعامل معه، والذي تندرج تحته كائناته الخاصة به للاتصال بقاعدة البيانات و ومعالجتها، ومن مميزات استدعاء فضاء الأسماء أنه يغنينا عن كتابة مسار الكائنات التي سوف نستخدمها، فقط نكتب اسم الكائن.
وعند التعامل مع قواعد بيانات SQL Server نستدعي فضاء الأسماء System.Data.SqlClient وذلك بكتابة الكود التالي في أعلى صفحة الكود:


using System.Data. SqlClient

وتندرج تحته مجموعة من الكائنات ولكن ما يهمنا منها كمبتدئين ما يلي:
1. SqlCommand.
2. SqlConnection.
3. SqlDataAdapter.
4. SqlDataReader.
5. SqlParameter.
6. SqlCommandBuilder.
7. SqlTransaction.
8. SqlException.

بعد تجهيز الخصائص السابقة لكائن الأمر ونريد تنفذ الأعمال المطلوبة منه عند حصوله على تيار من البيانات، لدينا ثلاثة طرق يتم بها العمل:

الطريقة الأولى (ExecuteReader) وهي أحد خصائص كائن الأمر وتقوم بتنفيذ استعلام بنيوي يرجع لنا مجموعة من الصفوف الموجودة في قاعدة البيانات وهو ما يتطلب استرجاع هذه النتيجة بواسطة الكائن sqlDataReader والذي سون نتحدث عنه بعد قليل.

الطريقة الثانية (ExecuteNonQuery) وهي أحد خصائص كائن الأمر وتقوم بتنفيذ استعلام بنيوي يقوم بتحديث قاعدة البيانات (من إضافة، تعديل، و حذف) أو تكوين قاعدة بيانات والنتيجة التي ترجع هي عدد الصفوف المتأثرة بالأمر.

الطريقة الثالثة (ExecuteScalar) وهي أحد خصائص كائن الأمر وتقوم بتنفيذ استعلام بنيوي يرجع لنا قيمة واحده فقط من قاعدة البيانات.

هذه مقدمة فقط وإليكم دورة مطولة لتعلم Ado وهي سهلة ومبسطة وعليكم أن تأخذوا ما يفيدكم منها
علما أنها ليست بلغة C#.net ولكن بلغة VB.net وهي قريبة جدا منها .

وإليكم هذا المثال على الربط مع DB.
هنا لدينا جدول يحوي معلومات عن مرضى وإخر يحوي معلومات عن الصور الخاصة بهؤلاء المرضى
نريد إظهار محتويات الجدول الأول في DataGrideview1 وما يرتبط بهذا المريض من صور في DataGrideview1
وما يرافقها من أوامر إضافة حفظ حذف للبيانات.
ومن يمتلك أي سؤال أرجو طرحه في هذا الموضوع وسيتم الإجابة بإذن الله.

صعب المنال
05-01-2008, 06:41 AM
عـشـــــــــــــــــــــــــــــــــــــــــت يا بطل..


الله معك ..

صعب المنال
05-01-2008, 02:32 PM
مشكور اياد مرا تانية ..
بس لما عم نفذ البرنامج ..Exception بالتعليمة ..
Connection.Open();

هل هنك طريقة ..او حركة معينة لم افعلها ..قبل تشغيل البرنامج..

اعذرني اذا كنت ذاكر هالشي انتا ولم انتبه ايليه ..

الله معك..

Eyad
05-02-2008, 02:02 AM
السلام عليكم :

أرجو فقط الانتباه إلى أن قاعدة البيانات التي يتعامل معها هذا البرنامج غير مرفقة .

والمثال المطروح للتعليم فقط .

على كل واحد أن يسقط هذا الكلام على قاعدة البيانات الخاصة به .
و السلام ختام,

Golden man
05-03-2008, 12:40 AM
بس لما عم نفذ البرنامج ..Exception بالتعليمة ..
كود PHP:
Connection.Open();



هل هنك طريقة ..او حركة معينة لم افعلها ..قبل تشغيل البرنامج

صديقي يوجد عدة احتمالات لهذا الـخطأ :
1 - ربما service الـ SQL متوقفة .....
2 - ربما يوجد خطأ في جملة الـ ConectionString لكائن الـ SqlConnection
.
.
.

جرب و أخبرني إن لم تحل المشكلة.

__________________________________________

و بما أني شاركت : شكرا إلك أستاذنا إياد ..... و بانتظار التتمة .... بالتوفيق

صعب المنال
05-03-2008, 05:41 AM
السلام عليكم ..
ما بعرف اذا المشكلة بس عندي صارت ...
بالنسبة لاقتراحات man

System.Data.SqlClient.SqlConnection Connection;

Connection.Open();

كلو بشكل نضامي ... وبالنسبة للسيرفر قد اقلع للعمل ...
لكن حسب تفسيري للموضوع ..الفئة السابقة عاجزة على تشكيل اتصال وانشاء socket مع الجهاز المحلي وهوا الــlocalhost ..ولا ادري اذا كان تعارض بالموضوع بالنسبة لغير سيرفرات

لكن بوجهت نضري انه يمكن ان يعمل عند غيري ولا يعمل عندي لانه عملية اتصال غبية
ويريد ان يتفرد بالــclient الذي لا تسمح له السيرفرات الموجودة على جهازي بالوصول له:rolleyes:
يبدو ان ان المشكلة ليست برمجية ولا منطقية المشكلة من اللغة نفسها ...:D

الله معكم..