اساسيات ربط SQL بتطبيقك او موقعك (2) - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
الأربعاء
2016-12-07
5:22 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

اساسيات ربط SQL بتطبيقك او موقعك (2)
اساسيات ربط SQL بتطبيقك او موقعك (2)

مقـــدمه
مقالتنا اليوم ستتطريق لموضوع جديد في كيفية ربط قاعدة بيانات سيكوال بتطبيق او موقع معين , وموضوع اليوم  هو كيفية استخدام الاجراءات او الاوامر المخزنه ( Stored Procedure ) داخل التطبيق , وشرح كيفية اضافة متغيرات اليها , ووضع قيمها من خلال التطبيق .

وكنا في مقاله سابقه شرحنا مبادئ اساسيه في ربط التطبيق بقاعدة البيانات , يمكنك الاطلاع على المقاله
http://topcoder.ucoz.com/publ/sql/2-1-0-42
Stored Procedure
هي اجراءات مخزنه مسبقاً يتم استخدامها في اكثر من موضع , فبدلاً من كتابة نفس الامر اكثر من مرة , يتم تخزين الامر في قاعدة البيانات داخل كائن , ومن ثم عندما نريد تنفيذ الامر , نقوم باستدعاء اسم الاجراء فقط
فمثلاً نفترض ان هناك امراً لاختيار بيانات المنتج صاحب product_id = 1 من الجدول التالي


يكون الامر داخل السيكوال هكذا
select * from products
where product_id=1

وكما شرحنا من قبل نقوم بكتابة هذا الامر داخل التطبيق في الخاصيه CommandText الخاصه بالامر , ومن ثم تنفيذ الامر وقراءة البيانات , ولكن من المحتمل احتياج نفس الامر في مكان اخر في التطبيق , ستضطر الى كتابته مره اخرى , وقد تحتاج نفس الامر في تطبيق اخر يعمل على نفس قاعدة البيانات , ولكننا يمكننا تجميع - او بمعنى اخر كبسلة - الامر في Stored Procedure - اختصارا نطلق عليه (proc) - بحيث كلما نحتاج الامر كل ما علينا هو استدعاء اسم ال proc فقط , وتكون الصيغة العامه لاضافة proc في السكوال كالتالي

create proc [ proc name ]
as
-- [ your commands ]
حيث يبدأ الامر بكلمة create -كعادة السيكوال عند اضافة اي كائن - ثم تتبع بكلمة proc او procedure , وهو نوع الكائن , ثم اسم ال proc ثم كلمة as ثم الاوامر التي نريد اضاقتها بداخله

وكمثال على الامر السابق , يمكننا كبسلته في proc من خلال الكود التالي
Create Procedure
 
وكما نرى فقد كتبنا كود اضافة الاجراء واسميناه SelectProduct1 , وهذا الاسم هو ما سنستدعيه من خلاله لاحقاً , ثم اتبعناه بكلمة as حيث يتبعها الاوامر التي نريد اضافتها , وهذا يعتبر ابسط اشكال Proc .

والان نحن نريد استخدام ذلك الكائن الجديد في تطبيقنا , الامر في غاية البساطه , حيث ان الامر لن يختلف عن سابقيه , حيث عمل الاتصال والامر السيكوال , وايضاً استخدام نفس الدوال الخاصه بانواع الاوامر , ونذكركم بها مره اخرى :
1- select تستخدم معه الداله ExecuteReader .
2- update , insert تستخدم معهما ExecuteNonQuery .

فلن نختلف عن كل الاكواد السابقه سوى في جزءئن :
1- الاول هم نص الامر CommandText حيث بدلاً من وضع الكود به , يتم وضع اسم ال proc .
2- الثاني هو يجب وضع قيمة الخاصيه CommandType = StoredProcedure , حتى نعلم الامر ان نص الامر هو اسم لاجراء في القاعدة .

وهذا سيكون شكل الكود في الفورم  
Execute Procedure
عمل proc يأخذ متغيرات
رأينا كيف ان الاختلاف بسيط عند استخدام proc بدلا من الامر المباشر , ولكن النوع السابق هو ابسط انواع الاوامر , حيث يكتب الامر مباشرة في ال proc , ولكن ماذا اذا اردنا ان نجعل رقم المنتج متغيراً , بحيث يأخذ هذا الامر من التطبيق نفسه , اذا سيحمل الامر متغيراً عند تنفيذه , وقد كنا في السابق نقوم بتكملة الامر من مربع نصي مثلا كالتالي
com.CommandText = "select * from products where product_id =" + txt_id.text ;

والامر كثير الشبه بذلك عند استخدام proc في تنفيذ الامر , فنحن نملك امراً داخل ال proc كالتالي
create proc SelectProduct1
as
select * from products
where product_id=1
ونحن نريد للرقم (1) الذي في جملة الشرط ان يكون متغيراً حسب ما نريد , اذا من المنطقي ان تكون جملة الشرط هكذا
where product_id= ؟؟  من المفترض ان يكون المتغير مكان علامتي الاستفهام

اذاً نحن بحاجة لتعريف متغير في ال proc !! , فكيف نعرف متغير في الاجراء ؟؟ , سيطرأ تغيير بسيط على شكل ال proc ويكون الهيكل الاساسي كالتالي

create proc [ proc name ]  @[ var name ] [ var type ]
as
-- [ your commands ]

كل ما يتغير في هيكل الاجراء هو اضافة متغير بعد اسم الاجراء مباشرة , مع تعريف نوع البيانات الخاصه به , على ان يسبق اسم المتغير علامة @ - ويمكنك تعريف اكثر من متغير بالفصل بينهم بفاصله , - وهكذا عندما نريد وضع متغير يحمل رقم product_id الى الامر السابق يكون الامر هكذا  
create proc with vars
 
حيث كما نرى اضفنا متغير بعد اسم proc , وعرفنا له اسماً معينا مسبوق بعلامة @ - وهذا الاسم بالعلامة هو الذي يستخدم في الامر داخل ال proc - , وعرفنا له نوع البيانات الخاصه به وهو int حيث اننا سنضعه في الشرط مساوياً لعمود من نوع int ايضا , ثم قمنا باستبدال الرقم الثابت (1) باسم المتغير , بحيث نخبر ال proc اننا سنمرر لك متغيراً معيناً , عليك ان تكمل الامر به وتنفذه , بحيث لو مررنا واحد ستكون جملة الشرط
where product_id = 1
بحيث استبدل اسم المتغير بالقيمة الممرره من خلاله وهكذا يمكنك عمل اكثر من متغير كما قلنا بالفصل بينهم بفاصله كالتالي
create proc [ proc name ]  @[ var1 name ] [ var1 type ] , @[ var2 name ] [ var2 type ]
as
-- [ your commands ]
ثم بعد ذلك استخدام المتغير في المكان الذي نريده داخل الامر نفسه

حتى الان الامر لم يختلف كثيراً , ولكن كيف يمكن تمرير تلك المتغيرات داخل كود السي شارب , واين سنضعها , وهذا هو ما سنشرحه الان , حيث سنأخذ مثالاً على عمل امر insert داخل الجدول products , مع تمرير اسم وسعر وكمية المنتج من خلال متغيرات , وسيكون كود السيكوال الخاص بالاجراء كالتالي
Add Product Proc.
 
حيث تم عمل ثلاث متغيرات , متغير لاسم المنتج وهو من النوع varchar , والرقم (50) يشير الى طول البيانات داخل الحقل , والمتغير الثاني وهو ثمن المنتج من النوع money والمتغير الثالث وهو الكميه من النوع int , وقد تم كتابة الامر كما في السابق مع استبدال المتغيرات مكان القيم الثابته .

والات نحن بحاجة لربط ذلك الاجراء بتطبيقنا , الامر ليس كما في السابق نكمل الامر المباشر من خلال مربع نصي او خلافه , فنحن لدينا متغيرات .... كيف سنضعها واين ؟؟

هذه المتغيرات اولا لابد من تعريفها داخل الامر في كود اللتطبيق , هناك خاصيه تسمى Parameters وهي عبارة عن كوليكشن يتم اضافة المتغيرات الخاصه بالامر داخلها , حيث كما اضفنا المتغيرات بانواع بياناتها في ال proc , تتم اضافة تلك المتغيرات بأسماءها الى الامر في السي شارب هكذا
com.Parameters.Add("@var name", var type)

ثم نمرر القيم لكل متغير داخل الكوليكشن من الخاصيه value الخاصه بكل متغير داخل الكوليكشن كالتالي
com.Parameters["@var name"].Value = [value]"
حيث يتم فتح قوسي الكوليكشن ووضع اسم المتغير المراد وضع قيمة له , ثم نستخدم value له ونساوية بالقيمة التي نريد سواء كانت نص , كأسم المنتج , او رقم او غيره , ويمكن وضع القيمة بدون اسم المتغير من خلال وضع رقم المتغير بدلا من اسمه داخل قوسي الكوليكشن , حيث ترتب المتغيرات داخل الكوليكشن حسب ترتيب اضافتها
Parameters[0].Value = [value]

وباقي الاجراءات من فتح الاتصال واستخدام الداله الخاصه بالامر - وهنا ستكونExecuteNonQuery - وباقي الاجراءات كما هي لن تتغير , كل ما تغير هو اننا وضعنا الامر داخل proc .

ويكون الكود الخاص بالامر الاخير وهو اضافة منتج جديد كالتالي :
Execute proc with vars.
 
وكما وضحنا فقد تم تغيير نص الامر ليكون اسم ال proc , ووضعنا قيمة ال CommandType , ولأن ال proc به متغيرات وعددها ثلاثه , فقد تم اضافة تلك المتغيرات داخل الكوليكشن الخاص بها Parameters , مع تعريف اسمها ونوع البيانات الخاص بها من ال enum SqlDbTypt , كل هذا داخل قوسي الاضافة في الكوليكشن , ثم نقوم بعد ذلك بتمرير قيم المتغيرات التي من خلال الخاصيه value الخاصه بكل متغير داخل الكوليكشن , فيتم الوصول لكل متغير عن طريقين , اما بوضع اسمه داخل قوسي الكوليكشن [] , او رقم المتغير او ترتيب اضافته , وبالتأكيد يتم الترقيم من الرقم 0 , فيكون ترتيب اول متغير @pro_name هو 0 ,  وتمرير القيمة في المثال السابق كان مباشراً , بمعنى اننا وضعنا القيمة مباشرة داخل الكود في التطبيق - وكان هذا للتوضيح وعدم تشتيت الانتباه بتفاصيل اكثر اثناء الشرح - فقد وضعنا الاسم pro8 كقيمة للمتغير @pro_name , ولكن يمكننا الاستعاضه عن ذلك بتمرير القيمة من خلال مربع نصي تكتب به القيمه - وهذا هو المنطقي - ويكون الكود كالتالي
com.Parameters["@pro_name"].Value = txt_name.Text ;
or
com.Parameters[0].Value = txt_name.Text ;

وهكذا باقي المتغيرات , مع الاخذ في الحسبان تحويل النص الى نوع البيانات الخاص بالمتغير , فمثلاً المتغير الثاني سعر المنتج من النوع money ويقابله في السي شارب decimal فيجب تحويل قيمة النص الى decimal , وايضا المتغير الثالث يحول الى int وهذا مثال لتحويل المتغير الثاني @pro_price
com.Parameters["@pro_price"].Value = decimal.Parse(txt_price.Text) ;
or
com.Parameters[1].Value = decimal.Parse(txt_price.Text) ;

وبنفس الطريقه يمكنك عمل كل اوامرك داخل proc لتوفير الجهد والوقت على نفسك , وايضا لتوافر عامل الامان داخل برنامجك , خصوصاً لتطبيقات الانترنت , وفي النهايه لتكون برمجتك بطريقه احترافيه اكثر , فكما طبقناه على امري select , insert يمكن تطبيقه على كل الاوامر الخاصه بالسيكوال , ومنها الامر update حيث اقتصرنا على الامرين , اولاً لعدم الاطاله , ثانيا لتوافر كل الافكار الرئيسيه بهما , والامر لا يختلف ابدا مع الامر update .
ختـــام
وتعبتر هذه المقاله امتداداً لمقالتنا السابقة عن اساسيات البرمجة والربط بقاعدة البيانات , حيث قمنا فيها بشرح النقاط الاساسيه لهذا الموضوع , وقمنا في المقاله باستكمال نقطة مهمه وهي الربط باستخدام Stored Procedure , وسنقوم لاحقاً بكتابة مقالات اخرى تختص باجزاء متقدمة في هذا الموضوع .
تحميل المشروع
 Written by :  Mohammed Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-09-11 2:37 AM)
مشاهده: 4307 | تعليقات: 2 | وسمات: sql, stored procedure, c sharp, Database, procrdure, C# | الترتيب: 0.0/0


أترك تعليقك من خلال حسابك على الفيس بوك

تعليقات مشتركي الموقع

مجموع المقالات: 2
2  
سؤال
هلا انا بنيت برنامج وقاعدة البيانات
قاعدة البيانات عالسيرفير والبرنامج على اجهزة الشبكة
انا مستخدم الداتا سيت بكل البرنامج
سؤالي التصال عن طريق الدات سيت كيف بتم وصحيح استخدامه على الشبكة

1  
رائع شكرا لك

إضافة تعليق يستطيع فقط المستخدمون المسجلون
[ التسجيل | دخول ]
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2016
إنشاء موقع مجاني с uCoz