أهم أقسام المدونة
▼
الصفحات
▼
الخميس، 29 ديسمبر 2016
فئة خطأ سيكويل SqlError Class
فئة خطأ سيكويل SqlError Class
عند
حدوث خطأ أثناء الاتصال بسيكويل سيرفر، ينطلق الحدث InfoMessage الخاص بفئة اتصال سيكيول SqlConnection Class، حيث يمتلك المعامل الثاني e لهذا الحدث خاصية اسمها Errors تعيد مجموعة Collection عناصرها من نوع الفئة SqlError، حيث يحمل كل عنصر تفاصيل رسالة خطأ (أو تحذير) قادم من سيكويل
سيرفر.. ولكي تستخدم هذه الفئة، يجب أولا أن تضيف معالجا للحدث InfoMessage كالتالي:
Dim Cn As New
SqlConnection(My.Settings.BooksConStr)
AddHandler Cn.InfoMessage, AddressOf dbErrors
الآن
يمكنك استخدام الفئة SqlError
داخل المعالج dbErrors كالتالي:
Private Sub
dbErrors(sender As Object, e As SqlInfoMessageEventArgs)
For Each sqlErr As SqlError In
e.Errors
Console.WriteLine(sqlErr.Message)
Next
End Sub
وتمتلك
الفئة SqlError الخصائص التالية:
الأربعاء، 28 ديسمبر 2016
أنا ورأفت الهجان وأدهم صبري
أنا ورأفت الهجان وأدهم صبري!!
لاحظت ارتفاعا مفاجئا في عدد
زيارات مدونتي في الفترة الأخيرة.. والغريب أن المواضيع الشهيرة في المدونة لم
يتغير شيء في معدل زيارتها، وهذا يعني أن الزيارات الزائدة تتوجه إلى باقي منشورات
المدونة بشكل متساو!
وبفحص إحصائيات المدونة، اتضح شيء
غريب، وهو أن هذه الزيادة المفاجئة قادمة من روسيا!!.. فهل يوجد عرب في روسيا
لقراءة مدونتي، أم أن المخابرات الروسية قررت أن تضعني فجأة على قائمة أخطر
المطلوبين أمنيا؟!.. فهل لفت انتباههم موضوعي عن جرائم الحرب في حلب؟!
معلوم طبعا أن كل مخابرات العالم
تنقب عن المعلومات Data Mining عبر تغذية الأخبار News Feed
في محتوى الإنترنت.
بالنسبة للإخوة المصابين بالرعب من
نظرية المؤامرة: هذه ليست تكهنات، ففي عام 2010 كنت عائدا من القاهرة إلى المنصورة
وجلس بجانبي ضابط صف (شاويش) شاب من المخابرات الحربية يرتدي زيا مدنيا، ولفت
انتباهي مكالمته عبر الهاتف مع شخص ليطلب منه البحث عن مبرمج أوراكل، فسألته عن
السبب باعتباري مبرمج دوت نت يمكن أن أفيده، فاكتشفت لفرط الكوميديا أنه يريد
مبرمج أوراكل ليعدل له برنامجا من برامج تغذية الأخبار، فحاولت إفهامه أن هذه
البرامج مغلقة ولا يمكن تعديلها دون الحصول على الكود الأصلي لها، وأنها أصلا قد
لا تكون مكتوبة بأوراكل، ولا أدري لماذا كان مصرا على مبرمج أوراكل بالذات!!..
المهم أنني فهمت منه بعد عناء أنهم يستخدمون هذا البرنامج للحصول على تغذية الأخبار
الإسرائيلية لاستخدامها كمصدر لمعلوماتهم، وأنهم يدخلون الإنترنت من جهاز ثم
ينقلون هذه المعلومات يدويا (عبر فلاشة مثلا) إلى جهاز آخر غير متصل بالإنترنت
(أسلوب تأمين معروف حتى لا يتم اختراق أنظمتهم الداخلية)، ولكنهم عاجزون عن إعادة
عرض البيانات في برنامج التغذية على الجهاز الداخلي!.. وقد وعده المقدم بمكافأة
كبيرة (في الغالب ستكون إجازة، لأن الجيش لا يقدم مكافئات مالية، وأفضل مكافأة فيه
هي الإفراج عنك لبضعة أيام).. فطلبت منه أن يعطيني اسم البرنامج لأنه في الغالب
يحتوي على إمكانية تصدير واستيراد البيانات، وأخذت رقم هاتفه، فجهر لي بشكه في
أنني سأساعده قائلا:
-
طبعا ستذهب إلى
البيت وتنفّض للشاويش أيمن ابن المفعولة (مشِها المفعولة).
فطمأنته أن هذا لن يحدث، خاصة أنني
لا أقول ابن المفعولة ولا ما تنوب عنه :)، وأكتفي بابن الكلب :D .. وأن ما يقومون به هو عمل وطني، ويشرفني أن
أشارك فيه بما أقدر عليه.. (صحيح أنني كنت شديد الكراهية لمبارك ونظامه، لكن
بالتأكيد كراهيتي لإسرائيل أشد.. كراهية النظام لا تلغي حب الوطن على عكس ما يدعيه
إعلامهم ليل نهار موهما البسطاء بأن النظام هو الوطن!!).
المهم، حينما عدت إلى البيت (بعد
مواصلة إضافية من المنصورة إلى دمياط)، فركت كفي وأنا أقول:
-
مصر محتاجاك يا
رأفت.
وقمت بتنزيل البرنامج من الإنترنت
وفتحته، وفي خلال دقيقة كنت قد اكتشفت كيفية تصدير البيانات وحفظها في ملف خارجي،
وكيفية إعادة استيرادها من الملف وعرضها في البرنامج مرة أخرى، وهو اللغز الذي حير
أعتى عقول المخابرات الحربية المصرية بقيادة بلحة حينها، فاتصلت به (بالشاويش لا
ببلحة).. فكنسل علي والحق يقال واتصل هو.. مصر لسة بخير يا جماعة :D.. وقد انبهر جدا بعبقريتي الفذة، وقال لي إنهم
يستعينون بالمدنيين وإنني يمكن أن أتقدم للعمل معهم ما دمت بهذه البراعة منقطعة
النظير:
-
مصر محتاجاك يا
رأفت.
فشكرته بهلع على هذا العرض المغري
الذي كاد يصيبني بالإسهال، وأنهيت الاتصال!
لقد حمدت الله شكرا على انتهاء فترة
تجنيدي الإجبارية بسلام، وابن الـ ... يريدني أن أذهب إليهم بقدمي مرة أخرى
متطوعا!!.. اهرب بجلدك يا رأفت، وكفى ما قدمته لمصر حتى الآن :D
(بالنسبة للزملاء (مشوها الزملاء) في
المخابرات المصرية الذين سيظهر عندهم هذا الكلام: لا إهانة متعمدة، وأرجو أن يكون
مستواكم قد تحسن.. ما تودوناش في داهية أبوس إيديكم.. أما بالنسبة لأولاد المفعولة
في الموساد الذين سيظهر عندهم هذا الكلام: نعم أنا الذي ساعدتهم في التجسس عليكم..
أي خدمة :D
)
ما علينا.. نعود إلى موضوعنا الأصلي
الذي أشك أنكم ما زلتم تتذكرونه، وهو الزيارات الروسية المفاجئة لمدونتي:
طبعا هناك احتمال أن يكون هناك بعض
من يدخلون مدونتي عبر خادم تفويض Proxy Server موجود في روسيا ، بينما هم في أي
مكان آخر من العالم.. لكن أن يكون عدد زياراتهم أكثر من عدد الزوار المصريين
والسعوديين خلال الشهر الأخير، فهذا أمر يصعب تخيله!! (إلا أن كانت هناك جهة
مشبوهة تنقب في مدونتي وتريد إخفاء هويتها!!)
عموما يا جماعة، لو اختفيت في
الفترة القادمة، فأغلب الظن أنني سأكون في سيبريا :) :) :).. حاولوا إقناع أدهم
صبري لإنقاذي.. على الأقل من باب رد الجميل الذي قدمته للشاويش أيمن في المخابرات
الحربية :D
(لكنني سأقتسم معه ثمن مبيعات الرواية.. واللي أوله شرط آخره نور).. أو حتى فليرسلوا
يوسف شعبان ليقول لي:
-
مصر ما بتنساش
ولادها يا رأفت
:) :) :)
المفسر Interpreter
المفسر Interpreter:
هو برنامج يحول كل أمر في البرنامج
على حدة من لغة البرمجة عالية المستوى إلى لغة الآلة.. بمعنى أن المفسر يحول الأمر
الأول إلى لغة الآلة ثم ينفذه مباشرة، وبعد ذلك يحول الأمر الثاني ثم ينفذه.. وهكذا
حتى ينتهي البرنامج.. على عكس المترجم Compiler، الذي يقوم بتحويل البرنامج
بالكامل إلى لغة الآلة وإنشاء ملف تنفيذي قبل أن يبدأ في تنفيذ أي أمر.
من كتاب المبرمج الصغير، للصف
الثالث الإعدادي، للتنزيل مجانا:
الاثنين، 26 ديسمبر 2016
تعويذة الليل 6
أنتهكُ حدودًا للّحظةِ
أرسمُها كونًا مِن وهْمْ
أجعلُني دنيا للذّكرى،
أو قبرًا للحلْمِ الجَمِّ
يملؤني معنى أشعاري،
يشعرُني قلبٌ من هَمّْ
تخْلطُني دنيا الأشياءِ
تُبعثرُني: كيفًا في كمّْ
أنتهكُ حدودًا للّحظةِ
أعشقُها: مدحًا أو ذمّْ
#انتهاك_حدود_اللحظة
#قصيدة #تعويذة_الليل
محمد حمدي غانم، 2000
لتحميل ديوان انتهاك حدود
اللحظة كاملا:
ملاحظات على الاتصال بخادم سيكويل
ملاحظات
على الاتصال بخادم سيكويل:
في
التطبيق AuthorBooks_Reader (يمكنك تحميله مع أمثلة الكتاب المشار إليه في
نهاية الموضوع) استخدمنا فئة اتصال سيكويل SqlConnection Class للاتصال بقاعدة بيانات الكتب على الخادم
المحلي Local Server.
لاحظ
أننا فتحنا الاتصال في حدث تحميل النموذج Load ولم نغلقه إلا في حدث إغلاق النموذج FormClosing، ما أتاح لنا استخدام نفس الاتصال لتنفيذ جميع الاستعلامات التي
يقوم بها المستخدم.. ورغم أن كائن الاتصال معرف كمتغير موضعي Local
Variable في حدث تحميل النموذج، فقد
وضعنا مرجعا له في الخاصية Connection الخاصة بكائن الأمر Command Object المعرف على مستوى النموذج، وهذا يجعل كائن الاتصال حيا طالما كان
كائن الأمر حيا.. هذا هو السبب في أننا استخدمنا الخاصية Connection الخاصة بكائن الأمر لإغلاق الاتصال في حدث إغلاق النموذج كالتالي:
Cmd.Connection.Close( )
لاحظ
أن ترك كائن الاتصال مفتوحا طوال الوقت ممكن فقط في حالتنا هذه، لأننا نتعامل هنا
مع خادم محلي، وهناك نسخة واحدة فقط من البرنامج تتعامل معه.. لكن في البرامج
العملية التي تتعامل مع خادم حقيقي، قد يؤدي ترك الاتصال مفتوحا إلى تقليل كفاءة
البرنامج، خاصة إذا كان هناك عدد كبير من المستخدمين يتعاملون مع برنامجك في نفس
اللحظة.
افترض
مثلا أنك تصمم برنامجا لشركة يعمل بها 250 موظفا، وأن خادم سيكويل مجهز لاستقبال
100 اتصال فقط في نفس اللحظة.. في هذه الحالة لو جعلت برنامجك يفتح نفس الاتصال
بصورة دائمة طوال تشغيل المستخدم له، فإن أول 100 موظف يفتحون البرنامج على
أجهزتهم سيمنعون خادم سيكويل من الاستجابة لمئة وخمسين موظفا آخرين إلى أن يغلق
بعض المستخدمين البرنامج (وربما لا يفعلون هذا قبل موعد الانصراف)!
لقد
أحببت أن أريك كيف يمكن أن يؤدي التصميم الخاطئ لبرنامجك إلى نتائج كارثية، ويعطل
العمل ولا تجني من ورائه سوى السخط J !
ورغم
أن هذا مثال افتراضي لتقريب الفكرة، حيث إن سيكيول سيرفر يستطيع فعليا خدمة بضع
مئات من العملاء وربما أكثر في نفس الوقت، فإن هذا العدد مهما بدا لك كبيرا فهو
محدود، ويمكن تجاوزه عمليا في المؤسسات الضخمة كالحكومة الالكترونية مثلا (هل تتخيل
كم عدد الموظفين في الوزارات المختلفة الذين يتعاملون مع قاعدة البيانات في نفس
اللحظة؟)، أو في مواقع الإنترنت التي تحفظ قواعد بياناتها على سيكويل سيرفر، وأنت
تعرف أن بعض هذه المواقع يصل زوارها إلى عدة ملايين يوميا، ما يؤدي إلى بطء
استجابة الخادم، واعتذاره للكثير من العملاء عن وجود ضغط كبير بجبرهم على الانتظار
(لا ريب أنك واجهت هذه المشكلة مع خادم بريد هوتميل في بعض الأوقات)!
ولحل
هذه المشكلة في برنامجنا، عليك أن تنقل الكود من حدث تحميل النموذج وحدث إغلاقه
إلى حدث ضغط الزر، ليتم فتح الاتصال وإغلاقه فقط عند الحاجة.. ولا تقلق من كثرة
فتح برنامجك للاتصال وإغلاقه، فخاصية مساهمة الاتصالات Connection
Pooling التي يدعمها خادم سيكويل
تغنيك عن أي عناء لحل هذه المشكلة، حيث يتم ترك بعض الاتصالات مفتوحة لضمان سرعة
الاستجابة للاستعلامات المتكررة، دون إعاقة بعض المستخدمين عن الاتصال بالخادم..
ولحسن الحظ فإن تقنية المساهمة Pooling تكون فعالة في الوضع الافتراضي، ما لم تطلب أنت إيقافها صراحة عبر
نص الاتصال كما عرفنا سابقا.
وستجد
كود الاتصال المحسّن في المشروع المسمى AuthorBooks_Reader2 ضمن أمثلة الكتاب.
من
كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:
السبت، 24 ديسمبر 2016
تعويذة الليل 5
السّاعةُ تختنقُ وتعْوي،
وجميعُ اللحظاتِ تَفِرّْ
وبجوفي الجنّيُّ الأحمقُ
ممسوخٌ فلسفةَ الفِكْرْ
يدْفعُني خلْفَ اللّحظاتِ
لكي أنْقذَ بعضًا من عُمْرْ
لكنّي لمْ أُفْلحْ
إلا في أن أقنصَ لحْظةَ شِعْرْ
واللحْظةُ كاللحْظةِ،
لكنْ حينًا
تُمْسي اللحظةُ دهْرْ!
#انتهاك_حدود_اللحظة
#قصيدة #تعويذة_الليل
محمد حمدي غانم، 2000
لتحميل ديوان انتهاك حدود
اللحظة كاملا:
المترجم Compiler:
المترجم Compiler:
هو
برنامج يحول كل الأوامر المكتوبة بلغة البرمجة إلى لغة الآلة ليمكن للحاسب
تنفيذها.. ويسمى البرنامج المكتوب بلغة البرمجة مشروعا Project، بينما يسمى البرنامج بعد تحويله إلى لغة الآلة ملفا تنفيذيا Executable File، ويكون له
الامتداد .Exe، ويمكن للمستخدم تشغيله مباشرة على الويندوز بدون الحاجة إلى وجود
لغة البرمجة التي كتب بها الكود الأصلي على الجهاز.
من
كتاب المبرمج الصغير، للصف الثالث الإعدادي، للتنزيل مجانا:
الجمعة، 23 ديسمبر 2016
الماضي تولى
تَغارُ مِنَ التي في العمرِ ذِكرَى = وفي بسماتِها عمرٌ
سياتي
دعي الأوهامَ فالماضي تولّى = وما في القلبِ غيرُك يا
حياتي
دعيني في رُباكِ غدًا ضحوكا = وكوني أنتِ وحدكِ ذكرياتي
محمد حمدي
غانم، 2016
SqlConnection Class
فئة
اتصال سيكيول SqlConnection
Class
هذه
الفئة ترث الفئة DbConnection،
ما يعني أنها ضمنيا ترث الفئة Component وتمثل الواجهة IDbConnection.
وبالإضافة
إلى الخصائص التي ترثها من الفئة الأم، تمتلك هذه الفئة الخصائص التالية:
الأربعاء، 21 ديسمبر 2016
لقد أفنيت في التسطيب عمرا
لقد أفنيت
في التسطيب عمرا
مشاكلُ ويندوزٍ منها أعاني = لساعاتٍ وأيامٍ عواني
وليسَ الحلُّ إلا (إفَّ
ديسكٍ) = لتقسيمٍ ومحوٍ في ثواني
وذا للعالِمينَ أمورَ (دُوسٍّ)
= من الجيلِ المخضرمِ مثلِ شاني
فمعظمُ هذه الأجيالِ
(فافي) = ولم تنحتْ من الصخرِ الأغاني!
لقد أفنيتُ في التسطيبِ عمرا = وماذا العمر إلا ويندوزانِ؟!
محمد حمدي
غانم
١/١٢/٢٠١٦
إف
ديسك FDisk: برنامج في DOS لتقسيم القرص الصلب إلى أجزاء أو محوها
لغات البرمجة
لغات البرمجة Programming Languages:
لكل مخلوق في الكون لغة خاصة به حتى لو لم نفهمها نحن.. ففي
البشر والثدييات تكون لغة التخاطب صوتية.. وفي الحشرات لغة التخاطب تتم برقصات
معينة أو إفرازات كيميائية، بالإضافة إلى الأصوات.. لكن مدلول كل صوت وحركة ورائحة
يختلف من نوع إلى آخر، تماما كما تختلف معاني الكلمات من لغة إلى أخرى عند البشر.
ولا يختلف الأمر كثيرا إذا تكلمنا عن الحاسوب, لكن الحاسب
لا يفهم إلا لغة الآلة، وهي لغة تتكون من نبضات كهربية تتحكم في كيفية عمل أجزائه
المختلفة.. ونظرا لأن هذه النبضات لها قيمتان فقط (Off، On)،
فقد تم تمثيلهما رقميا بالرقمين (0، 1).. فإذا كان الرمز أ هو الشكل المكتوب للصوت
"ألف"، فإن الرقم صفر هو الشكل المكتوب للجهد الكهربي 0 فولت (Off) والرقم 1 هو الشكل المكتوب للجهد الكهربي 5 فولت (On).. باختصار: الرقمان 0 و 1 هما الأبجدية الخاصة التي نكتب بها لغة
الآلة، وباستخدامها كتب المبرمجون الأوائل الأوامر الموجهة إلى الحاسب.
لكن هذه اللغة بدائية وصعبة للغاية، لذا فكر المبرمجون
في الكتابة بلغة أسهل قليلا، على أن تتم ترجمة هذه اللغة بعد ذلك إلى لغة الآلة.. وقد
سميت هذه اللغة "لغة التجميع" Assembly، وهي تستخدم كلمات إنجليزية مختصرة
يسهل فهمها في كتابة الأوامر (مثل ADD و SUB و MOV).
ونظرا
لأن ترجمة هذه الأوامر يدويا من لغة التجميع إلى لغة الآلة لن يحقق الهدف المنشود،
فقد ابتكر أليك جليني Alick Glennie في عام 1952م برنامجا أسماه
مترجم الكود الآلي AutoCode-Compiler، لتحويل كود لغة التجميع إلى لغة الآلة.. وهكذا ظهر إلى الوجود
أول مترجم Compiler.
وقد
ظهرت العديد من لغات البرمجة وتطورت مع الزمن، لتبتعد تدريجيا عن لغة الآلة، وتصير
أكثر سهولة بالنسبة لمستخدمها.. وكانت لغات البرمجة الأولى تسمى باللغات منخفضة
المستوى Low Level، لأنها
كانت أقرب ما تكون إلى لغة الآلة، وكان المبرمج مضطرا إلى فهم تركيب مكونات الجهاز
(مثل عناوين الذاكرة وأسماء مخازن القيم Registers الموجودة في المشغل الدقيق Microprocessor)، لأن أوامر لغة البرمجة كانت تتعامل معها مباشرة.. هذا هو السبب
الذي من أجله كانت البرمجة حكرا على المهندسين في البداية!.. لكن لغات البرمجة
تطورت لتبتعد شيئا فشيئا عن تركيب الجهاز المادي، فصارت تسمى لغات البرمجة عالية
المستوى High Level، ولم
يعد المبرمج بالضرورة مهندسا، بل صار بالإمكان أن يتعلم البرمجة طفل في العاشرة من
عمره لديه معرفة بسيطة باللغة الإنجليزية!
وتوجد
العديد من لغات البرمجة، مثل كوبول COBOL وفورتران FORTRAN وسي
بلاس بلاس C++ وجافا Java وبيزيك Basic.. وقد تطورت إصدارات
البيزيك على نظام الدوس DOS إلى أن
ظهرت فيجيوال بيزيك على نظام الويندوز، وظهرت فيجيوال بيزيك على بيئة دوت نت عام 2002.
من
كتاب المبرمج الصغير، للصف الثالث الإعدادي، للتنزيل مجانا:
الثلاثاء، 20 ديسمبر 2016
جاذبية
جاذبية
سألها بشغف:
- هل تحبينني؟
أجابت بتردد:
- أحبكَ.. لكني أريدكَ أن
تتغيرَ من أجلي.
نظر لها مبتسما وسألها:
- ماذا يحدث عند تقريب
مغاطيس من قطعة حديد؟
أجابته دون أن تفهم مغزى سؤاله:
- ستنجذب إليه بالطبع.
- ومن المسئول عن هذا؟
- كلاهما مسئول.. كلاهما
طرف في القانون الكوني.
- وهل تملك قطعة الحديد
اختيارا؟
- لا.
- فهل سيلومها المغناطيس
يوما أنها ليست ذهبا؟
- لا.
- هل تعلمين لماذا؟
- لأنهما ثنائي متوحد..
الذهب لا يعني المغناطيس في شيء، أمام لهفته لقطعة الحديد!
نظر في عينيها بحب قائلا:
- فهكذا أنا أحبك كما أنتِ،
فأحبيني كما أنا!
سحرها الانسجام الفكري بينهما، وهامت في عينيه
لحظة، قبل أن تسأله مداعبة لتهرب من خجلها:
-
هل تقصد أنكَ قطعة
حديد؟!
قال بمكر:
-
لا تنكري أنني
مغناطيسك أيضا!
وغمز بعينه:
-
ولكنك عندي أغلى
من الذهب!
ضحكت في مرح قائلة:
-
أيها المراوغ.. لن
تخدعني بكلماتك البراقة عما طلبته منك.
قال بجدية:
-
ولكني أجبتك.
-
رفضتَ أن تتغير!
-
من قال هذا؟
-
كلامك عن الحديد
والذهب.
-
تكلمت أيضا عن
الجاذبية.. أليست طرفا في المعادلة الكونية أيضا؟
-
بلى.
-
فإذا قاربتنا
وألغت بيننا المسافات، فألا يعني هذا ضمنا أنها غيرتنا معا؟.. لقد صار البعيد
قريبا، والغريب حبيبا، وعند المسافة صفر، تذوب الفروق بين ما نحب وما نكره، فإذا
تجاوزنا أفق الحدث وصارت المسافة بالسالب، ذابت الفروق بين ما هو منك وما هو مني،
وانهارت فيزياء كل منا ليعاد تشكيلنا معا في كيان واحد، يحمل أجمل ما فينا، هو ما
سيقدمه حبنا للوجود.
شردت مع كلماته مشدوهة، وابتسمت في عشق، ولم
تعقب.
فقط تركت نفسها تهوي في مجالات جاذبيته..
إلى ما لا نهاية.
محمد حمدي غانم
25/11/2016
فئة الاتصال DbConnection Class
فئة الاتصال DbConnection
Class
هذه
الفئة أساسية مجردة Abstract Base Class (تجب وراثتها MustInherit)، وهي تمثل الواجهة IDbConnection، كما أنها ترث فئة المكون Component
Class.. هذه هي صيغة تعريفها:
Public MustInherit Class DbConnection
Inherits Component
Implements IDbConnection, IDisposable
لاحظ
أنك لن تستطيع إضافة هذه الفئة إلى صينية مكونات النموذج Component
Tray لأنك لا تستطيع إنشاء
نسخة جديدة منها، لكن الفئات المشتقة منها مثل SQLConnection يمكن إضافتها إلى صينية المكونات.. لفعل هذا افتح صندوق الأدوات Toolbox، وأسدل الشريط Data، واضغطه بزر الفأرة الأيمن، ومن القائمة الموضعية اضغط Choose
Items، وفي النافذة التي ستظهر،
ضع علامة الاختيار بجوار مجموعة الأدوات التي تبدأ بالحروف SQL ومن ضمنها SQLConnection، ثم اضغط الزر OK.. الآن ستجد هذه الأدوات تحت الشريط Data في صندوق الأدوات.. انقر الأداة SQLConnection مرتين بالفأرة لإضافة نسخة منها إلى صينية المكونات.
وبالإضافة
إلى ما تمثله من خصائص الواجهة IDbConnection، تملك هذه الفئة الخاصيتين التاليتين:
مصدر البيانات DataSource:
تعيد اسم خادم سيكويل الذي سيتم الاتصال به.
إصدار الخادم ServerVersion:
تعيد نصا يمثل إصدار سيكويل سيرفر الذي يتصل به
العميل.. ويجب أن يكون الاتصال مفتوحا في تلك اللحظة وإلا حدث خطأ.
وبالإضافة
إلى ما تمثله من وسائل الواجهة IDbConnection، تمتلك هذه الفئة الوسيلتين التاليتين:
إضافة إلى قائمة التعاملات EnlistTransaction:
أرسل إلى هذه الوسيلة كائن التعاملات Transaction
Object الذي تريد ضم تعاملات
الاتصال الحالي إليه، لتكوين تعاملات منتشرة Distributed
Transaction، وهي تعاملات تنفذ عمليات
على أكثر من مصدر وأكثر من اتصال، ولا ينجح تنفيذها إلا إذا نجحت كل أجزائها.
معرفة المخطط GetSchema:
تعيد كائن جدول DataTable
Object، يحتوي على بيانات المخطط
Schema الخاص بالخادم.
ولهذه الوسيلة صيغة ثانية، تستقبل معاملا نصيا
يمثل اسم المخطط الذي تريد استعادته.
كما توجد صيغة ثالثة، تزيد على الصيغة السابقة
بمعامل ثان، يستقبل مصفوفة نصية String Array، تمثل القيود Restrictions التي تريد الحصول على مخططها.
كما
تمتلك هذه الفئة الحدث التالي:
تغير الحالة StateChange:
ينطلق عند تغير حالة الاتصال (عند إغلاقه أو
فتحه).. والمعامل الثاني e لهذا الحدث من النوع StateChangeEventArgs، وهو يمتلك الخاصيتين التاليتين:
OriginalState
|
تعيد
إحدى قيم المرقم ConnectionState التي تمثل حالة الاتصال قبل حدوث التغيير.
|
CurrentState
|
تعيد
إحدى قيم المرقم ConnectionState التي تمثل حالة الاتصال الحالية (بعد حدوث التغيير).
|
والفئات
التالية ترث الفئة DbConnection:
1-
SqlConnection.
2- OdbcConnection
.
3- OleDbConnection.
4- OracleConnection.
ما
يعني أنها جميعا تمتلك خصائص ووسائل هذه الفئة.
من
كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO
.NET.. للتنزيل: