اساسيات ربط SQL بتطبيقك او موقعك - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
الأحد
2016-12-04
11:17 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

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

مقـــدمه
سنتعرض اليوم لأمثله بسيطه لربط قاعدة البيانات من نوع SQL Server مع التطبيق الذي سيعمل عليها , حيث سنعرض مبادئ اساسيه لعمل الامر الخاص بالسيكوال , وما نوع الاجراء داخل البرنامج الذي يتبع مع كل امر
اولا امر select
وهو من الاوامر الرئيسيه في السيكوال , فامر select يقوم باختيار بيانات معينه من قاعدة البيانات , وتكون الصيغة البسيطة للأمر كالتالي

Select column1 , column2 , ...etc  from table_name

وهذا معناه اختيار البيانات داخل الاعمده column1 , column2 , ...etc  في الجدول , ولكن هذا الامر سيجلب كل البيانات في الجدول كله من تلك الاعمده , لأننا لم نحدد له شرط معين , لذا يضاف الشرط where عند الحاجة لطلب بيانات معينه بدلالة حقل معين , فيمكن اضافة الجمله الاتيه للامر
where column1 = (any_value)

حيث سيجلب البيانات من الصفوف التي بها قيمة column1 مساويه ل any_value لو لقيمة معينه نقوم بتحديدها

وللتوضيح عملياً اكثر سنقوم بشرح الأمثله على جدول افتراضي بسيط يتكون من اربعه اعمده



1- العمود الأول product_id وهو من النوع int , وهو يتزايد اوتوماتيكياً حيث تم تفعيل الخاصيه identity لهذا العمود ( وهنا لن تكون باستطاعتك اضافة اي قيمة داخل ذلك العمود لأن القيمة تضاف اوتوماتيكياً )
2- العمود الثاني product_name من النوع varchar وهو ما يعني قبوله لنصوص
3- العمود الثالث product_price من النوع money اي سيقبل قيم عدديه تعبر عن قيمة نقديه معينه , ويقابلها في السي شارب float , decimal
4- العمود الرابع quantity من النوع int وهو يقبل ارقام تعبر عن كمية المنتجات

وعند عمل امر select لهذا الجدول سيكون كالتالي
Select Command
 
وهذا الامر يعني قيام اختيار كل البيانات (*) في الصف الذي فيه قيمة العمود product_id مساوية ل 1

وهذا معناه انه سيختار صف واحد فقط - حيث ان قيمة العمود product_id لا تتكرر ابدا في الصفوف - ويمكنك استبدال * باسماء الاعمده التي تريد اختيارها فقط , ولكن كتوضيح تم اختيار كل البيانات , وهو ما يعني جلب 4 بيانات من الاعمده الاربعه على الترتيب product_id , product_name , product_price , quantity

وحتى هنا ينتهي مهمة السيكوال وتبدأ مهمة التطبيق في تنفيذ ذلك الامر واستخدام البيانات الاتيه من قاعدة البيانات , وفي الكود التالي سنوضح كيف يمكنك تنفيذ ذلك الكود في السي شارب
Execute Select Command
 
حيث قمنا في البدايه بعمل كائن جديد للإتصال بقاعدة البيانات , وتم وضع نص الاتصال داخل قوسين الكلاس , وعليك استبدال ذلك النص بالنص الخاص بقاعدة البيانات التي ستعمل عليها , ثم قمنا بعمل امر سيكوال لتنفيذه داخل قاعدة البيانات , وتم وضع الخاصيه CommandText وهي تقبل حالتين , أما كتابة الامر مباشرة كأنه داخل السيكوال , وأما وضع اسم اجراء داخل قاعدة البيانات (Stored Procedure) وضعت مسبقاً تحتوي على اوامر سيقوم بتنفيذها , حيث نحتاج هنا ان نضع الخاصيه CommandType = CommandType.StoredProcedure
وسنقوم بتوضيح تلك الجزئية لاحقاً

ثم نقوم بفتح الاتصال , وهنا يأتي الوضع الاهم في الكود , حيث هنا سينفذ الأمر , ولكن تختلف طريقة تنفيذه باختلاف نوع الامر وبالتالي تختلف الداله التي ستنفذ الامر , وهناك ثلاث دوال اكثر شيوعاً واستعمالاً في ذلك وهما :
1- ExecuteReader وهي تستخدم عند جلب بيانات من قاعدة البيانات - كما في حالتنا السابقة -وعادة تكون مع الامر من نوع select حيث تقوم بجلب البيانات على هيئه SqlDataReader تستطيع من خلاله قراءة هذه البيانات
2- ExecuteNonQuery وهي تستخدم عند تنفيذ امر معين داخل قاعدة البيانات , ولا يترتب على تنفيذ الامر تدفق بيانات الى البرنامج , وتستخدم مع الامرين update , insert حيث عند تحديث او اضافة بيانات , لا تأتي بيانات راجعه من قاعدة البيانات
3- ExecuteScalar وهي تستخدم عندما تكون البيانات المتدفقه من الامر عباره عن قيمة واحده فقط , بمعنى اخر عند اختيارك حقل واحد فقط معين داخل قاعدة البيانات ككل , كأن تختار مثلا سعر منتج معين له product_id = 1 , وهو ما يعني ان بيانا واحدا فقط سيأتي من الامر وهو 52 مثلا

وكما قلنا ففي حالتنا استخدمنا الدالة الاولى لأننا نستخدم امر select , وقد تم جلب البيانات عن طريق reader , حيث يكون على هيئه تشبه مصفوفه تحتوي على صف معين , وتكون بطول مساو لعدد الاعمده المطلوبه , بمعنى اننا اخترنا مثلا في الامر عمودين فقط , فسوف تكون داخل القارئ reader قيمتين فقط في كل تكرار ل loop , وهنا اللوب لن يتكرر الا مرة واحده فقط , حيث اننا اخترنا صفاً واحدا فقط , وسوف يحتوي القارئ على اربعة بيانات مرتبة حسب ترتيب الاعمده في الامر ( وعند استخدام * سيترتب على حسب ترتيب الجدول ) , ولكن لو كان الامر يجلب اكثر من صف 7 مثلا , فسيتكرر اللوب 7 مرات بواقع مره لكل صف , وكل مره سيحتوي اربعة قيم يمثلون القيم الخاصة بالصف المرتجع , ويمكن التفريق بين القيم داخل القارئ بطريقتين , اما باسم العمود او برقم القيمة في مصفوفة القارئ , ورأينا كيف تعمل عمل تحويل casting للقيم من object الى نوع البيانات الخاص بكل قيمة اتيه , ثم بعد اتمام الاجراءات يتم اغلاق الاتصال واستخدام القيم كما نريد
استخدام متغير يحمل رقم الصف
في المثال السابق يمكننا اجراء بسيط نستطيع من خلاله تغيير رقم الصف الذي نريد جلبه من قاعدة البيانات , فالامر السابق كان كالتالي
com.CommandText = "select * from products where product_id = 1"

وهو يعني جلب بيانات المنتج صاحب product_id =1 , وهو ثابت في جميع الاحوال , ولكن ماذا لو اردنا تحديد product_id من خلال البرنامج نفسه , ولنفترض وضعه داخل textBox معين , لأجل ذلك يتم تغيير الامر كالتالي , بافتراض وضع الرقم في مربع نصي اسمه txt_id

com.CommandText = "select * from products where product_id =" + txt_id.text ;

بمعني اننا نخبر البرنامج ان يكمل نص الامر من خلال قيمة داخل مربع نصي , وهذا الاجراء مهم جدا من ناحية المرونه في التطبيق
ثانياً امر insert
يستخدم هذا الامر لاضافة صف جديد الى الجدول في قاعدة البيانات , فمثلا اذا اردنا اضافة منتج جديد الى قاعدة البيانات السابقه ستكون كالتالي
Insert Command
 
حيث يتبع اسم الامر باسم الجدول ثم اسماء الاعمدة المراد اضافتها بين قوسين - يرجى الملاحظه انه لا يمكنك الاضافة داخل عمود product_id حيث انه يتزايد تلقائيا , وايضاً لا يمكنك تجاهل عمود لا يقبل القيمة null - ثم يتبع بالكلمه values ثم قيم الاعمدة - حسب ترتيبها في القوسين السابقين - موضوعه ايضا بين قوسين .

يقوم هذا الامر باضافة المنتج الجديد بالبيانات السابقه داخل الجدول , وعندما نريد تنفيذ ذلك الامر داخل التطبيق , فمعظم الاكواد تظل كما هي من حيث عمل اتصال وامر و...  الخ  , ولكن كل الاختلاف في جزئيتين
* يتم تغيير commandText ووضع قيمة الامر به
* يتم تغيير الداله التي تقوم بتنفيذ الامر الى ExecuteNonQuery حيث كما وضحنا فالامر لا ينتج عنه تدفق بيانات من قاعدة البيانات
وبالتالي فنحن لسنا بحاجة الى reader لأننا لن نقرئ شئ من قاعدة البيانات , فكل ما سيحدث هو اضافة البيانات السابقه , وكل ما ترجعه الداله هو عدد الصفوف المتأثرة بذلك الامر ,  ثم اغلاق الاتصال , ويكون الكود كالتالي
Execute Insert Command
استخدام متغيرات تحمل البيانات
وكما في المثال السابق يمكن تغيير بيانات المنتج من خلال استبدال البيانات الثابته في الامر , بنصوص داخل مربعات نصوص كالتالي :

com.CommandText = "insert Products ( product_name , product_price , quantity ) values ( '" + txt_pro_name.Text + "', " + txt_price.Text + " , " + txt_quan.Text + ")";
ثالثاً الأمر update  
ويستخدم الامر لتحديث حقل معين في الجدول , فاذا اردت تحديث سعر منتج معين فسوف تستخدم الامر update , ولنفترض اننا نريد تحدث سعر المنتج الذي اسمه pro1 سيكون الكود كالتالي

Update Command
 

ويمكن التحديث من خلال id المنتج بتغيير الشرط الاخير الى
where product_id = 1

ويمكن استخدام اياً من الاعمده في الشرط , واذا قمت بازالة الشرط من الامر فسوف يقوم بتحديث السعر لكل المنتجات ! , حيث انك لم تحدد منتج معين لتحديث سعره , لذلك سيطبق الامر على العمود product_price بالكامل

وكتطبيق الامر السابق في البرنامج فالامر لن يختلف مطلقاً عن الامر insert سوى في تغيير نص الامر فقط , اما الداله ExecuteNonQuery فستظل كما هي , حيث ان هذا الامر ايضاً لن ينتج عنه تدفق لأي بيانات , وسيكون الكود كالتالي
Execute Update Command
 
وكسابقيه من الاوامر يمكن وضع البيانات في متغيرات , فيمكن عمل اسم المنتج المراد تغييره في مربع نصي , والاسم الجديد في مربع اخر كالتالي

com.CommandText = "update products set product_name = '" + txt_old.Text + "' where product_name = '" + txt_new.Text + "'" ;

ولاحظنا انه يجب وضع علامة التنصيص المفرده ' داخل النص وذلك لأن البيان من نوع نصي
ختـــام
المقاله تحتوي على شرح لأهم اساسيات الربط بين قاعدة بيانات SQL وتطبيقك على السي شارب , حيث تم التركيز على كتابة الاوامر بالطريقه داخل البرنامج , ثم اختيار دالة التنفيذ المناسبة لتنفيذ الامر , وسنحاول في مقالات قادمة التوسع اكثر باستخدام Stored Procedure داخل قاعدة البيانات , ثم تنفيذها في البرنامج , حيث تعتبر Stored Procedure الخيار الافضل في الربط , نظراً لسهولتها , وايضا عامل الامان التي توفره , خصوصا عند الربط قاعدة البيانات مع موقع  
تحميل المشروع
 Written by :  Mohammed Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-09-10 4:38 AM)
مشاهده: 8060 | تعليقات: 2 | وسمات: reader, Connection, insert, sql, Data, updat, csharp, C#, command, Select | الترتيب: 0.0/0


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

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

مجموع المقالات: 2
2  
رائع جدا .. بارك الله فيك

1  
ما شاء الله مقال اكثر من رائع , تقريباً انت قولت كل اللي كنت بدور عليه , جزاك الله كل خير يا محمد !

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

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

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