الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أسئلة بخصوص الربط مع قواعد البيانات

بدأه m.aljoul في 4 يناير 2011 · 12 رد · 2,122 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم إخواني الكرام

أنا أتعامل مع البرمجة منذ فترة .... ولكن دائماً عندي لغط بطرق الاتصال بقواعد البيانات

أرجو ممن لديه الخبرة أعزائي توضيح طرق الاتصال بقواعد البيانات ............

ستقولون لي هناك الكثير من المواضيع التي تشرح ما أطلبه....

ولكن؟

أعزائي كل شخص يشرح كما هو يعرف بغض النظر عن توضيح الطرق الأخرى

مرة أسمع عن الأدو دوت نت ومرة أخرى أسمع عن الوضعين المنفصل والمتصل ومرة أخى أسمع عن البروسيدر ومرة أخرى أسمع عن اللينك

ومرة أسمع عن الأوبجكت ومرة ومرة ومرة ........

إخواني بودي أن أحترف البرمجة أكثر ولكن الآن أنا بين مفترق طرق بالنسبة لقواعد البيانات

لماذا كل هذه الطرق؟

وما هو أفضلها للتعامل الاحترافي مع قواعد البيانات؟؟

رجااااااء حااااااااار شرح كامل متكامل أو كل شخص يشرح اللي بيعرفو لكن بتوضيح ولو بإسهاب

ورجااااااء حاار أن يكون الشرح بلغة vb.net

وجزاؤكم عند الله كبير

مع تحياتي والسلام عليكم ورحمة الله تعالى وبركاته

تم تعديل هذه المشاركة بواسطة m.aljoul في 4 يناير 2011 في 20:20

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#2

الاخوه المشرفين على المنتدى حرام والله حرام

ضروري من حل لمشكله كتابه الردور اي المشاركات

والله ان كاتب اكثر من 20 سطر للاخ العزيز وفجئه اشوع الصفخه عامله اعاده تحديث و رجعت صفحه كتابه المشاركه بس بدوان الي كنت مواصل كتابته

احاحاحاح قهر

العفو منك اخي العزيز إن شاء الله وقت ثاني اعيد الكتابه

ليس العيب ان لاتعلم وانما العيب ان لا تتعلم

Is not a shame that U don't know, but that would not.

#3

ولا يهمك أخي العزيز

أضم صوتي لصوتك

بانتظارك مرة أخرى

مع تحياتي

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#4

السلام عليكم اخي العزيز

قبل كل شي اعتذر للاخواه المشرفين على سوى توضيح المشكله

نبدا معك اخي العزيز

قبل البداء اخي حاول تهداء اعصابك و ياريت لو يكون بالصلاه على اشرف خلق الله محمد عليه الصلاه والسلام

اما ماسئلت عنه عن طرق البرط وانوع الربط وووو الخ..........ز

اولا طرق الربط لا يس سوى طريقتين هما كما قلت انت الوضع المتصل والمنفصل

اما الاول فهو الاقدم واليه عمله هي :

عند طلب اي بيانات من قاعده البيانات يجب ابقاء القاعده مفتوحه الى ان تنتهي عمليه قراءه البيانات الازمه

مثلا لواردنا جلب بيانات من جدول الطلاب لعرضها للمستخدم فتكون الخطوات كالاتي

- فتح القاعده

- ارسال الطلب (جمله ال select) وبعدين يرجعلنا البيانات التي طلبناها اوكي .

- الان البيانات موجوده معنا ومحمله داخل متغير من نوع DataReader اوكي

- لاتمام العلميه لا بد من قراءه البيانات من المتغير السابق الى اي اداه على الواجهه وبعد اكمال القراءه

- نقوم باغلاق الاتصال مع قاعده البيانات (لوقمنا باغلاق الاتصال ولم نقوم بقراءه البيانات من المتغير السابق او لام نكتمل من قرائتها فسيحدث غلط فورا وسيتوقف البرنامج عن العمل)

خلاصه الكلام ان استخدام هذا الوضع في اكثر العلميات غير محبذا واقرب مثال لذالك :

لو ان النظام يعمل بهي اكثر من مستخدم في نفس الوقت و فاعده البيانات هي واحده للكل فعند كل طلب من اي مستخدم يبقى الاتصال مفتوح حتى ينتهي المستخدم

تخيل معي لو ان 50 مستخدم طلبو ا نفس البيانات في نفس الوقت وفرضا كان حجم البيانات كبير فماذا سيحدث لقاعده البيانات ؟؟؟؟؟؟؟؟ اكيد يحصل لها هستيريا و تجنن والمبرمج هو السبب بس ايش يمعلها

خلاص فات الاوان . هههههه

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

الجواب هو ان هناك حالات يفضل فيها هذا الوضع عن غيره مثلا :

- ان يكون النظام وقاعده البيانات في نفس الجهاز

- عند عمل اظافه للسجلات دون الاستعلام عن اي سجل (يعني لو انك عملت واجهه الادخال لا تعرض اي بيانات من القاعده) لانهو في مثل هذه الحاله لو استخدمنا الوضع المنفصل (الشرح بالتفصيل يتبع) فانه ليس

موجدي لان من اليه عمل هذا الوضع هو عدم القدره مع التعامل معا اي جدول الا بعد جلب بياناته اي في حاله الادخال يقوم بعمليه مش لازمه بالخالص وهي ارجاع بيانات الجدول اوكي (اذا لم توضح الفكره في الشرح

الاحق إن شاء الله يوضحهها)

اما الوضع المنفصل هو سبب اخترع ال ADO.NET

فان اليه عمله توضح من اسمه

اي عند طلب اي بيانات من قاعده البيانات فانها تكون كالاتي

- تحديد جمله ال select

- يقوم هذا الوضع عن طريق استخدام class يسمى ال DataAdapter بعمليه فتح قاعده البيانات وجلب البيانات المطلوبه وتحميلها في ال RAM ومن ثم يقوم باغلاق قاعده البيانات

يعني لو انك تشتي تقراء البيانات الى الواجهه فيمكنك قرائتها على اقل من مهلك لانك لن تسبب لقاعده البيانات اي مشاكل وكذالك اخوانك المستخدمين الاخرين

مش هذا وبس و لان ال DataAdpter يقوم بجلب البيانات من القاعده فهو المسؤول ايضا عن اي عمليه على الجدول الذي تم جلبه (Insert , update ,delete ,create ,alter ) كل هذا وانت غير متصل بقاعده البيانات

الله يجزيه الخير هههه, اوكي

واهم شي في هذا الوضع هو انك تمتلك الحريه التامه في التعامل مع قاعده البيانات باكثر مرونه ممكنه (مثلا يمكنك قراءه قاعده البيانات كامله الى ال RAM وغلق الاتصال يودي ذالك الى مضاعفه سرعه الوصال الى البيانات الى عشره اضعافها )

فالمعلومه الذي اريد ان اوصلها اليك هي ان حدود نظام هي الي تحكم عليك استخدام اي الوضعين معا ذالك اقولك اخي الكريم اني وكثر البرامج الكبيره الى عرفتها والتي عملتها انا ولا واحد من تلك الانظام الا وهو يستخدم الوضعين معا

ولكن الاعتماد الرئيسي على الوضع المنفصل للاسباب السابقه

اوكي الان الى الى الطريقه العامه او القاعده الاساسيه للربط مع اي قاعده بيانات بي من الوضعين

1- اولا تحديد ال Provider (او مااسميته انت البرسيدر)

يتم تحديد نوع ال provider بحسب نوع قاعد البيانات المستخدمه

2- ثانيا انشاء جمله الاتصال مع قاعد البيانات

تتكون الجمله من اشيا ء اساسيه وهي

- اسم ال Provider

- اسم ومسار قاعده البيانات

- اسم المستخدم

- كلمه السر للمستخدم

3- بعد بناء جمله الاتصال نقوم بتعريف متغير من نوع (XX Connection )

ال XX تعبر عن نوع هذا المتغير او فصيلته مثلا لوان قاعده البيانات من نوع اوراكل سيكون (OracleConnection)

او اذا كانت اكسس فيكون (OledbConnection)

وهكذا ...... بعد ذالك نسند جمله الاتصال الى متغير الاتصال اوكي.....!

الان متغير الاتصال هو مرشدي الامين للتعامل مع قاعده البيانات فهو الذي سيقوم بفتح اواغلاق القاعده وهو الذي سيرسل الاوامر الى قاعده البيانات ويعود بالبيانات منها اليك وووووو ......

الان بقي كيفيه ارسال الاوامر الى القاعده

اولا 111111111111111

الوضع المتصل :

- لدى هذا الوضع class اسمه ال XXcommand

ال XX تعبر عن نوع هذا المتغير او فصيلته مثلا لوان قاعده البيانات من نوع اوراكل سيكون (OracleCommand)

او اذا كانت اكسس فيكون (OledbCommand)

هذا ال class هة العمود الفقري للوضع المتصل ,,,,, عن طريقه نقوم بارسال اوامر ال SQL وارجع نتائجها ...

عيب هذا ال class انه لا يستطيع العمل الا بعد ان تقوم ان بفتح الاتصال

وبعد ذالك عندارجاع البيانات يقوم الاخير بارجاعها الا متغير من نوع DataReader

هذا الاخير هو بمثابه جدول ولكن فتره استخدامه تنتهي عند اغلاق قاعده الاتصال بالقاعده

يتبع إن شاء الله ...........

تحياتي

3

ليس العيب ان لاتعلم وانما العيب ان لا تتعلم

Is not a shame that U don't know, but that would not.

#5

أخي الكريم

تعجز كلماتي عن وصف هذا الشرح الرائع / أتمنى أن تكمله لي

وحبذا لو يكون هناك أمثلة توضح / أعرف بأني أثقلت عليك ولكني كلي عشم بك.....

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

لا لشيء إلا لأني استفدت من الجزء الذي كتبته استفادة كبيرة جداً أزالت اللغط الذي كان موجوداً عندي؟

A.S. كتب:

1- اولا تحديد ال Provider (او مااسميته انت البرسيدر)

أخي الكريم

أنا أعرف بالضبط ما هو Provider

وكنت أقصد Stored Procedures

وأشكرك مرة أخرى عزيزي

وبانتظار المزيد

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#6

حسنا

اولا عليك معرف ما يلي :

هناك اكثر من نوع لل db و كل نوع له ConnectionString خاص به

و لكن بشكل عام ال connection String كالاتي:

server,db name,security type,username,password

ثانيا عليك معرف انه هناك نوعين للاتصال مع ال db

1- Connected DB

تستعمل ال dataReader

2- Disconnected DB

تستعمل ال DataAdapter+ Dataset

و كل منهما له استخداماته الخاص ا1ا اردت الشرح بها الرجاء ارسال رساله لي لاشرح لك

هناك object اسمه command وهو مسؤل عن ارسال الامر الى ال DB و تنفيذه

و سف اعطيك مثال

dim con as new sqlconnection(connection-string)'l

dim com as new sqlcommand("",con) .l

وهنا عملنا كونكشن و كومند و ربطناهم مع بعض

com.commandtype=commandtype.storedpeocedure

com.commandtext="name of stored procedure"

هناك 3 انواع من اوامر التنفيذ لل stored proceure /sql statmet

com.excutenonquery وهنا برجع بعدد الريكورد اللي تم تنفيذ الامر عليها

com.excutescaler و هنا برجع بالقيمة المطلوبة في جمله ال sql

com.excutereader و هنا برجع و sqldatareader object

مثال

sql="select max(salary) from employees "

dim i as integer=com.excutescaler

sql="select * from employees where emp_address='jordan' orderby name

dr=com.excutereader

sql="update employee set [salary]=1000 where emp_id=123

com.excutescaler

1
#7

أخي الكريم AspDeveloper

بصراحة لم أفهم كثيراً ما قلته إلا الجزء المتعلق بما يلي:

اقتباس

اولا عليك معرف ما يلي :

هناك اكثر من نوع لل db و كل نوع له ConnectionString خاص به

و لكن بشكل عام ال connection String كالاتي:

server,db name,security type,username,password

ثانيا عليك معرف انه هناك نوعين للاتصال مع ال db

1- Connected DB

تستعمل ال dataReader

2- Disconnected DB

تستعمل ال DataAdapter+ Dataset

و كل منهما له استخداماته الخاص ا1ا اردت الشرح بها الرجاء ارسال رساله لي لاشرح لك

هناك object اسمه command وهو مسؤل عن ارسال الامر الى ال DB و تنفيذه

وما بعده لم أفهم شيء

فأرجو أن تعيد الفكرة بشكل أوضح لكي تعم الفائدة وخاصة الـ Stored Procedures

كما أرجو من أخي .A.S

تكملة حله لي لكي تعم الفائدة أكثر وأكثر

سأمدد الموضوع لأكثر من الوقت المحدد أملاً في إيجاد إجابات أكثر شمولية.

مع تحياتي

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#8

اخي العزيز m.aljoul

المعذره منك اخي لاني لم اكمل الشرح والسبب يعود الى انشغالي بالامتحانات النصفيه !

بعد الايضاح منك عن ماتريده هو ال Stored Procedures

الاجراءات المخزنه في قاعده البيانات :

هي عباره عن دوال عاديه مثلها مثل التي تتعامل معها في ال vb.net او اي لغه برمجيه اخرى

الا ان هناك فروق بسيطه بينها حيث صاحبتنا ال Stored Procedures بتكون مخزونه داخل قاعده البيانات وليس في ملف المشروع مثل ما في ال vb.net

اي انها تكون في امان اكثر وتعمل بكفائه اكبر مع التعامل مع الكائنات الاخرى في قاعده البيانات مثل الجداول و غيرها

وهي عاده تكون مكتوبه بلغه ال PL/SQL حيث الاخيره تعتبر لغه برمجه قواعد بيانات قياسيه .

ال Stored Procedures تكتب بطريقه عامه مثل الدوال في الدوت نت (اي انها تملك مدخلات parameters وتعود بقيمه ايضا)

لكل نوع من قواعد البيانات يتم كتابه ال Stored Procedures داخلها بطريقه قاعده البيانات نفسها (اي اوراكل لها طريقتها و اسكيوال سيرفر لها طريقتها )الا انها كلها في الاخير لها هيلكه متشابها الى حد كبير

لا يمكني شرح طريقه كتابه Stored Procedures لان هذا وحده يحتاج موضوع كامل

ولا كان ساشرح طريقه التعامل معها من دخل لغات البرمجه مثل ال VB.NET

كما قلت لك في الموضع الاول الاشياء الاساسيه لبدء عمليه الاتصال وارسال و قراءه النتائج من قاعده البيانات

واذا ذكرت ان هناك وضعين للاتصال مع قاعده البيانات (المتصل والمنفصل)

انا سبقا قلت لك ان الوضع المنفصل هو الافضل لا منازع

اما الان وفي قضيه التعامل مع ال Stored Procedures فانا افضل والاكثريه التعامل مع الوضع المتصل

واكيد انا تعرف السبب

السبب هو انك عند استدعاء ال Stored Procedures من قاعده البيانات فان ال Stored Procedures ستقوم بعملها داخل محرك قاعده البيانات وانت تنتظر للقيمه الراجعه منها فقط

المثال الاول بفرض انا نتعامل مع قاعده بيانات من نوع اوراكل

اولا كود انشاء ال في قاعده البيانات من داخل محرر ال SQL Plus


* create or replace procedure GetWordSynnum(IN_OrginalWord varchar2(10), Out_WordSynnum out varchar2(20) )
* is
* begin
* select wordSynumm into Out_WordSynnum
* from salah.TblTest
* where OrginalWord = IN_OrginalWord;
* end GetWordSynnum;

/*

ثانيا كود الاستدعاء

لا تنسى تضمين المكتبه

using System.Data.OracleClint;


//تعريف متغير الاتصال واسناد جمله الاتصال اليه
OracleConnection oraConn = new OracleConnection("Data Source=TestOraDB; User ID=salah; Password=You");
//تعريف متغير الاوامر
OracleCommand oraCmd = new OracleCommand();
oraCmd.Connection = oraConn; // اسناد متغير الاتصال اليه
oraCmd.CommandType = CommandType.StoredProcedure; // StoredProcedure تحديد نوع الكائن الذي سيتعامل معه متغير الاوامر هنا من نوع
oraCmd.CommandText = "GetWordSynnum"; // التي سيتعامل معها StoredProcedure تحديد اسم ال
/*
* StoredProcedure بعد ذالك نقوم بتعريق المعاملا ت التي سترسل الى
* في المثال لدينا اثنين معاملات الاول سيكون من نوع ادخال
* ونسند له قيمه للادخال Hello
*/
OracleParameter oraParmIn = new OracleParameter();
oraParmIn.ParameterName = "IN_OrginalWord";
oraParmIn.OracleType = OracleType.VarChar;
oraParmIn.Value = "Hello";
oraParmIn.Direction = ParameterDirection.Input;
/*
* المعامل الثاني من نوع اخراج
* StoredProcedure اي انه سيعود بالقيمه الناتجه من استعدعاء ال
*/
OracleParameter oraParmOut = new OracleParameter();
oraParmOut.ParameterName = "Out_WordSynnum";
oraParmOut.OracleType = OracleType.VarChar;
oraParmOut.Direction = ParameterDirection.Output;
// هنا نضيف المعاملات الى متغير الاومر
oraCmd.Parameters.Add(oraParmIn);
oraCmd.Parameters.Add(oraParmOut);
try
{
oraConn.Open(); // نقوم بفتح الاتصال قبل تشغيل متغير الاومر
oraCmd.ExecuteNonQuery(); // هنا قمنا بتنفيذ الامر (استدعاء ال StoredProcedure)

//بعد تنفيد الاستدعاء يتم خزن القيمه في المعامل الثاني والان نقوم بعرض القيمه الراجعه من الاستدعاء
MessageBox.Show((string)oraCmd.Parameters["Out_WordSynnum"].Value);

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
oraConn.Close(); // سبب وضع كود الاغلاق هنا هو لانه في حال حدوث اوعدم حدث خطاء في الاعلى سيتم تطبيق هذه الجمله
}

العفوا على عدم ايضاح فكره المثال

الفكره كانت عباره عن ارسال كلمه و ارجاع المعنى العربي لها من الجدول

حيث ارسلنا كلمه Hello وسيكون الناتج كلمه <<مرحبا>>

تحياتي اخي الكريم

وإن شاء الله نعود بشرح افضل المره القادمه

بالتوفيق

تم تعديل هذه المشاركة بواسطة A.S. في 16 يناير 2011 في 03:47

1

ليس العيب ان لاتعلم وانما العيب ان لا تتعلم

Is not a shame that U don't know, but that would not.

#9

أشكرك أخي على ردك الجميل

وبصراحة لي تعقيبين

أرجو التوضيح بالنسبة لقواعد بيانات Sql Server

كما أنني بحاجة لتوضيح أكبر من بعد إذنك أخي الكريم

سأمدد الموضوع للفائدة

اقتباس

لا يمكني شرح طريقه كتابه Stored Procedures لان هذا وحده يحتاج موضوع كامل

أخي أرجو أن تفرد موضوع كامل خاصة بهذا الشأن وحبذا لو تضيفه هنا لكي يكون الموضوع أشمل (إن أحببت)

مع تحياتي

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#10

أنا بانتظار تكملة الموضوع إخوتي الكرام

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#11

إخواني الكرام

أنتظر تكملة الإفادة النسبة لهذا الموضوع

مع تحياتي

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#12

برجاء الرفع للإفادة

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

#13

أين أنتم إخواني الأعزاء

أرجو الإفادة بتكملة الموضوع

وشكراً

اللهم اجعلنا أهلاً لحمل رسالة العلم ونشرها

لتنعم أمة الإسلام بخير العلم ونوره

www.ijoul.com

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…