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

درس في ADO.NET من الصفر إلى الإحتراف .

مثبّترائج
بدأه yaseralshikh في 29 ديسمبر 2006 · 196 رد · 170,211 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#76

التوضيح

ياتي مع الفيجوال نت الادوات BindingSource1 و DataSet1 و OleDbDataAdapter1

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

والمطلوب كيف اقوم بالتغيير في جملة الاستعلام بالكود لاني اريد اغير جملة الاستعلام حسب اختيار المستخدم لبعض الاشياء الموجودة على الفورم

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

ولو فيه مثال لشرحك للطريقة الثانية (المنفصل) ... ارجو ان لا اكون اثقلت عليك بهذة الطلبات

ولك جزيل الشكر اخي ياسر .

تم تعديل هذه المشاركة بواسطة ابوطلال في 24 فبراير 2007 في 22:27

#77

أخي أبو طلال ..

سوف أعمل على إيجاد شرح وافي عن طريقة التعامل مع هذة الاداوات والطريقة الصحيحة لانشاءها وكيفية التعامل معها ، كل ما تريده ، سنأتي عليه في الشرح ، أوعدك بذلك ، ولكن الأمر يحتاج إلى بعض الوقت ، فأنا لدي إلتزامات أخرى واعمل على قدر إستطاعتي ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#78

اخي ياسر

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

فانا في انتظارك في اي وقت و لا تضغط على نفسك بهذا الخصوص

دعائي لك بالتوفيق والسداد

تم تعديل هذه المشاركة بواسطة ابوطلال في 25 فبراير 2007 في 00:35

#79

السلام عليكم

ساقوم انشاءاللله اذا سمح لي اخي yaseralshikh

بوضع اضافات قيمة لبعض الجوانب التي تم التعريج عليها باختصار مثل:

1-خصائص connection والاحداث المتعلقة به .

2-خصائص ومفاهيم pooling ووظائفة وطريقة الاستفادة منة .

3-خصائص command .

اخ اخ .... وسوف احاول ارفق امثلة تطبيقية .

وإن شاء الله سوف تكون دورة (درس في ADO.NET من الصفر إلى الإحتراف )

كاملة متكاملة تغطي اغلب المفاهيم وطرق عمل ado.net

تمنياتي لكم بالتوفيق .

#80
ahmedd كتب:
السلام عليكم

ساقوم انشاءاللله اذا سمح لي اخي yaseralshikh

بوضع اضافات قيمة لبعض الجوانب التي تم التعريج عليها باختصار مثل:

1-خصائص connection والاحداث المتعلقة به .

2-خصائص ومفاهيم pooling ووظائفة وطريقة الاستفادة منة .

3-خصائص command .

اخ اخ .... وسوف احاول ارفق امثلة تطبيقية .

وإن شاء الله سوف تكون دورة (درس في ADO.NET من الصفر إلى الإحتراف )

كاملة متكاملة تغطي اغلب المفاهيم وطرق عمل ado.net

تمنياتي لكم بالتوفيق .

بارك الله فيك وفي اخونا ياسر

اكيد هذا مما يسعد اخونا ياسر ويسعد كذلك جميع الاعضاء

وفي انتظارك

#81

بالطبع يا أخي ahmedd يسعدني كثيراً أن تقدم ما لديك من معلومات ، وانا في إنتظار أول مشاركاتك ، وأتمنى أن تكمل من حيث توقفنا ، إلى أن ننتهي من شرح أغلب الكائنات وأهمها ، ثم نعرج على ما فاتنا منها من خلال إضافات إلحاقية ، هذا رأي لست ملزم به ...

والله الموفق ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#82

up

#83

السلام عليكم

شكرا على الموضوع الرائع والهام ايضا

اريد ان استفسر لدي مشروع فجول بيسك نت 2003 مرتبط بsql server 2000

المهم وجدت كود لديك للاتصال ووضعته كالتالي السلام عليكم

Dim Conn As New SqlConnection("Provider=SQLOLEDB;Data Source=SQL Server DB;Initial Catalog = A7BBD49216D148A.bank.dbo")

لكن يظهر لي خطأ في الprovidr

علما بأني كتبت في البدايه هذا الكود

Imports System.Data.SqlClient

اريد ان اسأل هل الprovider في sql server هو ثابت SQLOLEDB , والداتا سورس وضعت فيه اسم السيرفر على الجهاز او تتوقع الخطأ في هذا الكود في اسم قاعدة البيانات؟؟

أرجوكم مساعدتي في عمليه الا تصال للضروره وجزيت الف خير على الموضوع الرائع

#84

لقد أوضحت منذ البداية أنني لست على خبرة كبيرة في SqlServer ، لكنى أعتقد بأن الـ provider في sql server ليس ثابت ، ويختلف من إصدار إلى اصدار ، وللحصول على سلسلة الإتصال المناسبة لك أحيلك إلى الرابط التالي ..

http://www.connectionstrings.com/

فهو يحتوي على سلاسل الإتصال بالعديد من قواعد البيانات ..

والله الموفق .

تم تعديل هذه المشاركة بواسطة yaseralshikh في 13 مارس 2007 في 22:36

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#85

بالتوفيق ....

#86

بسم الله الرحمن الرحيم

وبه أبدا وأستعين ، وأختم بالصلاة والسلام على خاتم الأنبياء والمرسلين نبينا محمد وعلى آله وصحبه أجمعين ، أما بعد ..

=============

3 - الكائن DataAdapter :

في الدروس السابقة وضحنا العمل الذي يقوم به هذا الكائن ، حيث قلنا حينها أنه " بمثابة وسيط بين مجموعة البيانات "DataSet " ومصادر البيانات "Data Sources" ، حيث يقوم DataAdapter بعملية فتح الاتصال بقاعدة البيانات و استيراد وتصدير البيانات من و إلى مصدرها الأساسي ، وبعد تخزين البيانات في DataSet ، فإنها تصبح منفصلة عن مصدر البيانات ، لان الكائن DataAdapter يقوم بشكل تلقائي أيضاً بقطع الاتصال بقاعدة البيانات " ، ولكن هذا ليس كل شيء ، ما زلنا نحتفظ بالجزء الأفضل لدرس اليوم ...

يستخدم هذا الكائن كائنان صديقان تعرفنا عليهما فيما سبق ، وهما : الكائن OleDbConnection لإدارة اتصاله بقاعدة البيانات ( من فتح الاتصال و غلق الاتصال ) ، و الكائن OleDbCommand لإدارة استعلامات SQL البنيوية التي يجب تنفيذها ( من تحديد أو إضافة أو تعديل أو حذف ) . ولتجهيز هذا الكائن للعمل هناك أكثر من طريقة وجميعها جيده ، فقط على المبرمج أن يختار ما يناسبه منها ، والكود التالي يبين كيف يتم إنشاء ملائم بيانات ، واستخدام الكائن OleDbConnection لإدارة اتصاله بقاعدة البيانات ، وكذلك استخدام الكائن OleDbCommand لإدارة استعلام SQL والذي يقوم بتحديد مجموعة من الحقول المتوفرة في إحدى جداول قاعدة البيانات التي تم الاتصال بها ، وكذلك سوف نستخدم إحدى خصائص الكائن DataAdapter وهي SelectCommand ولكنا لن نزعج أنفسنا بها هنا ، وسوف نشرحها بالتفصيل في وقت لاحق ، فقط نحتاج إلى القليل من التركيز لتأمل الكود التالي ..

' Create the ConnectionString.
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
' Create the SelectCommand.
Dim selectCommand As OleDbCommand = New OleDbCommand("SELECT * FROM Information")		
Dim instance_adapter As New OleDbDataAdapter()
instance_adapter.SelectCommand = selectCommand
instance_adapter.SelectCommand.Connection = selectConnection

ويمكن اختصار الكود السابق ليصبح كما يلي ..

' Create the ConnectionString.
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
' Create the SelectCommand.
Dim selectCommand As OleDbCommand = New OleDbCommand("SELECT * FROM Information", _   
	selectConnection)
Dim instance_adapter As New OleDbDataAdapter()
instance_adapter.SelectCommand = selectCommand

ويمكن اختصار الكود السبق أكثر من ذلك ليصبح كما يلي ..

Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;Jet OLEDB:Database Password=ado.net;")
Dim selectCommandText As String = "SELECT * FROM Information"
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)

ويمكن اختصار الكود السبق أكثر من ذلك ليصبح كما يلي ..

Dim instance_adapter As New OleDbDataAdapter("SELECT * FROM Information" _
, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Note.mdb;" _
& "User Id=admin;Jet OLEDB:Database Password=ado.net;")

ويتمتع هذا الكائن DataAdapter بالعديد من الخصائص ، ومن أهمها :-

* الخاصية Fill :

حيث تنقل البيانات من قاعدة البيانات (مصدرها الأساسي ) إلى DataSetأو DataTable ، وبعبارة أخرى القيام بعملية الاستيراد . والكود التالي يبين كيف يتم إنشاء الكائن DataAdapter وتجهيزه ، واستخدام الخاصية Fill لتعبئة الـ DataSet بالجدول المحدد في جملة الاستعلام ، ومن بعد ذلك نعرض مربع رسالة تخبرنا بعدد السجلات المتوفرة في الجدول الذي تم تخزينه في DataSet للتو ..

Dim selectCommandText As String = "SELECT * FROM Information"
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)
Dim MyDs As New DataSet
instance_adapter.Fill(MyDs)
MsgBox(MyDs.Tables(0).Rows.Count, MsgBoxStyle.Information)

في الحقيقة الخاصية Fill تأخذ الكثير من المتغيرات ( البارامترات ) ، سنتحدث عن أهمها ، وهو srcTable ومن خلاله نستطيع أن نضع اسم للجدول الذي نريد تخزينه في الـ DataSet وذلك من أجل الحصول على اسم ذو معنى أوضح ، وبدون هذا المتغير سوف يأخذ هذا الجدول الاسم "Table" ، وفي مثالنا السابق نستطيع استبدال السطر التاسع بالكود التالي لإعطاء الجدول اسم "Demo" ..

instance_adapter.Fill(ds, "Demo")

ولكي نتأكد من اسم الجدول الذي قمنا بتخزينه في الـ DataSet ، نكتب الكود التالي لعرض مربع رسالة تخبرنا باسم الجدول ..

MsgBox(ds.Tables(0).TableName)

ملاحظة :- الصورة الكاملة للمتغيرات ( البارامترات ) التي تأخذها الخاصية Fill ..

instance_adapter.Fill(MyDataSet As DataSet, startRecord  As Integer, maxRecords As Integer, srcTable As String)

حيث أن :

1- البارامتر MyDataSet يشير إلى الـ Dataset التي نريد تخزين الجدول بها .

2- البارامتر startRecord يشير إلى رقم السجل الذي نريد أن نبدأ به في تحميل البيانات ( يجب أن نعلم أن هذا الرقم يبدأ بالرقم صفر ويدل على السجل الأول ) من الجدول الذي نريد نسخ بياناته وتكوينه في الـ Dataset .

3- البارامتر maxRecords يشير إلى رقم السجل الذي نريد أن ننتهي عنده في تحميل البيانات من الجدول الذي نريد نسخ بياناته وتكوينه في الـ Dataset .

4- البارامتر srcTable يشير إلى الاسم المقترح للجدول الذي نريد تكوينه في الـ Dataset .

مثال :-

في المثال التالي لدينا جدول يحتوي على مجموعة من السجلات عددها 15 سجل ، ونريد أن نخزن تكوين وبيانات هذا الجدول في الـ DataSet ، ونريد أيضاً اختيار مجموعة محدده من السجلات ، على أن نبدأ من السجل الخامس ( بالطبع ترتيبه داخل السجلات يحمل الرقم 4 ) وننتهي إلى السجل العاشر ( بالطبع ترتيبه داخل السجلات يحمل الرقم 9 ) ، وبعد ذلك نريد أن نعطي هذا الجدول الاسم "Demo" ، وفي الأخير نعرض مربع رسالة تخبرنا بعدد السجلات في الجدول الذي تم تخزينه للتو ، وقيمة السجل الأول في العمود الأول من الجدول ..

Dim selectCommandText As String = "SELECT * FROM Information order by name"
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)
Dim ds As New DataSet
instance_adapter.Fill(ds, 4, 9, "Demo")
Dim strMsg As String = String.Format("Count of Records In The {0} Table = {1}.{2}The " _
& "First Value In The second Column Is : {3} .", _
ds.Tables(0).TableName, ds.Tables(0).Rows.Count, vbNewLine, _ ds.Tables(0).Rows(0).Item(0)
MsgBox(strMsg, MsgBoxStyle.Information)

(( يمكن تغيير الأرقام ومشاهدة النتائج المختلفة ))

* الخاصية TableMappings :

عندما يختار DataAdapter بياناته من قاعدة البيانات بواسطة جملة الاستعلام للمرة الأولى ، فإنه يخزنها في الـ DataSet ضمن جدول يحمل اسم افتراضي Table بشكل تلقائي ، وأي تحميل آخر للبيانات في الـ DataSet فإنها سوف تخزن ضمن جداول تحمل اسم table1 ، Table2 ، ... وهكذا ، و هذا الاسم كما يبدو لا يدل على اسم ذو معنى واضح ، ونستطيع من خلال TableMappings تحويله إلى اسم ذو معنى أوضح ، ولعل التمثيل الذي في الصورة التالية يوضح الفكرة ...

TableMappings1.jpg

ولكي نقوم بذلك نحتاج إلى تمرير متغيرين من نوع String للخاصية Add التابعة للخاصية TableMappings ، الأول SourceTable وهو اسم الجدول الافتراضي ، والثاني DataSetTable وهو الاسم الذي نريده للجدول الذي يجب أن يستقبل البيانات في الـ DataSet .

ومثال على ذلك :

الكود التالي يبين كيف يتم إنشاء الكائن DataAdapter وتجهيزه ، واستخدام الخاصية TableMappings لتغيير اسم الجدول الذي يجب أن يستقبل البيانات داخل الـ DataSet وفي النهاية نعرض مربع رسالة توضح اسم الجدول مع عدد سجلاته ..

Dim selectCommandText As String = "SELECT * FROM [Information]"
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)
Dim ds As New DataSet
instance_adapter.TableMappings.Add("Table", "Info")
instance_adapter.Fill(ds)
Dim strMsg As String = String.Format("Count of Records In The {0} Table = {1} .", _
	ds.Tables(0).TableName, ds.Tables(0).Rows.Count)
MsgBox(strMsg, MsgBoxStyle.Information)

ملاحظة هامة : (( لو كان الأمر مجرد تغير اسم الجدول ، فإنه يغنينا عن كل هذا العناء ، مجرد كتابة الاسم المقترح للجدول خلال استدعاء الخاصية Fill كما ذكرنا سابقاُ ، وهذه هي الإعادة للكود اللازم لعمل مثل ذلك ..

instance_adapter.Fill(ds, "Demo")

هذا رائي الشخصي )) .

ليس ذلك فقط بل نستطيع كذلك تغيير أسماء الحقول ( الأعمدة ) الموجودة دخل الجدول إلى أسماء ذو معنى أوضح ، وذلك من خلال الخاصية ColumnMappings التابعة للخاصية TableMappings ، وهي أيضاً تحتاج إلى تمرير متغيرين من نوع String للخاصية Add التابعة لها ، الأول SourceColumn وهو اسم العمود الأساسي في قاعدة البيانات ، والثاني DataSetColumn وهو الاسم الجديد الذي نريده للعمود في الجدول المخزن في الـ DataSet .

ولعل التمثيل الذي في الصورة التالية يوضح الفكرة ...

TableMappings2.jpg

ومثال على ذلك :

الكود التالي يبين كيف يتم إنشاء الكائن DataAdapter وتجهيزه ، واستخدام الخاصية TableMappings لتغيير اسم الجدول الذي يجب أن يستقبل البيانات داخل الـ DataSet ، ويلي ذلك نقوم باستخدام الخاصية ColumnMappings لتغيير أسماء بعض الحقول ( علماً أننا سوف نشير للجدول الافتراضي Table بالرمز (0) وذلك كي نخبر هذه الخاصية أننا نريد أن يتم إجراء التعديلات عليه )، وفي النهاية نعرض مربع رسالة توضح اسم الجدول مع عدد سجلاته ، واسم العمود الثاني في الجدول ..

Dim selectCommandText As String = "SELECT * FROM [Information]"
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)
Dim ds As New DataSet
instance_adapter.TableMappings.Add("Table", "Info")
instance_adapter.TableMappings(0).ColumnMappings.Add("Name", "First Name")
instance_adapter.TableMappings(0).ColumnMappings.Add("ID", "InfoID")
instance_adapter.Fill(ds)
Dim strMsg As String = String.Format("Count of Records In The {0} Table = {1} .{2}The  
	name Of the second Column Is It : {3} ."), _
	ds.Tables(0).TableName, ds.Tables(0).Rows.Count, vbNewLine,	 
	ds.Tables(0).Columns(0).ColumnName )
MsgBox(strMsg, MsgBoxStyle.Information)

ملاحظة هامة : (( لو كان الأمر مجرد تغير أسماء الأعمدة ، فإنه يغنينا عن كل هذا العناء ، مجرد كتابة عبارة AS في جملة الاستعلام ، وهذا هو الكود اللازم لعمل مثل ذلك ..

Dim selectCommandText As String = "SELECT ID AS [Info ID], Name AS [First Name] FROM [Information]"

هذا رائي الشخصي )) .

وهناك استخدامات أخرى ، مثالاً على ذلك لو أننا أردنا تحميل البيانات من جدولين مختلفين من خلال DataAdapter واحد ، وللقيام بذلك علينا أن نتأمل المثال التالي حيث يقوم بتوضيح الفكرة :

في البداية يتم إنشاء الكائن DataAdapter وتجهيزه ، واستخدام الخاصية TableMappings لتغيير اسم الجدول الأول ( وليكن أسمة Info ) الذي يجب أن يستقبل البيانات داخل الـ DataSet ، ويلي ذلك نقوم باستخدام الخاصية ColumnMappings لتغيير أسماء بعض الحقول ( علماً أننا سوف نشير للجدول الافتراضي Table بالرمز (0) وذلك كي نخبر هذه الخاصية أننا نريد أن يتم إجراء التعديلات عليه )، وبعد ذلك نستدعي الخاصية Fill لتحميل البيانات ، ثم نغيِّر القيمة DataSetTable الخاصة TableMappings إلى اسم الجدول الثاني ، والذي سوف نعطيه الاسم Note ( كل ذلك يتم داخل الـ DataSet ) ، ونقوم بتغيير اسم أحد حقوله ، وبعد ذلك نكتب جملة الاستعلام التي نريدها أن تحظر لنا بيانات الجدول الثاني من مصدر قاعدة البيانات ، وعندما نستدعي مرة أخرى الخاصية Fill فإن البيانات الجديدة ستذهب مباشرة إلى الجدول المسمى Note ، وبذلك نكون قد حصلنا على جدولين من خلال DataAdapter واحد ، وفي نهاية المطاف كي نتأكد من صحة التغييرات والمدخلات ، نعرض مربع رسالة تخبرنا ببعض التفاصيل المتعلقة بالجدولين ..

Dim selectCommandText As String = "SELECT * FROM [Information]"
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)
Dim ds As New DataSet
instance_adapter.TableMappings.Add("Table", "Info")
instance_adapter.TableMappings(0).ColumnMappings.Add("Name", "FirstName")
instance_adapter.TableMappings(0).ColumnMappings.Add("ID", "InfoID")
instance_adapter.Fill(ds)
instance_adapter.TableMappings(0).DataSetTable = "Note"
instance_adapter.TableMappings(0).ColumnMappings.Add("Note", "MyNote")
instance_adapter.SelectCommand.CommandText = "SELECT * FROM [Note]"
instance_adapter.Fill(ds)
Dim strMsg As String = String.Format("Count of Records In The {0} Table = {1} ." _
	& "{2} The name Of the second Column Is It : {3} ." _
	& "{4}Count of Records In The {5} Table = {6} ." _
	& "{7} The name Of the second Column Is It : {8} .", _
	ds.Tables(0).TableName, ds.Tables(0).Rows.Count, vbNewLine, _
	ds.Tables(0).Columns(0).ColumnName, _
	vbNewLine, ds.Tables(1).TableName, ds.Tables(1).Rows.Count, vbNewLine, _
	ds.Tables(1).Columns(1).ColumnName)
MsgBox(strMsg, MsgBoxStyle.Information)

* الخاصية FillSchema :

تجعل هذه الخاصية الخاصة بالكائن DataAdapter يحمل بنية البيانات الموجودة في الجدول المختار إلى الكائن DataSet بدون تحميل أية بيانات ، وبعبارة أخرى هذه الخاصية مشابهة للخاصية Fill ولكنها لا تنسخ البيانات معها . ولها ثلاثة متغيرات ( بارامترات ) :

- المتغير الأول هو الـ DataSet.

- المتغير الثاني هو SchemaType ومن خلاله نخبر هذه الخاصية فيما إذا كان يتوجب عليها استخدام TableMappings الخاص بالكائن DataAdapter أم لا ، و لهذا المتغير قيمتين تتحكم في ذلك الأولى Mapped ( ينصح في استخدامه في الغالب ) وهي تجعل DataAdapter يستعمل البنية التي حددت له من قبل TableMappings . والقيمة الثانية هي Source وهي تجعل DataAdapter يتجاهل البنية التي حددت له من قبل TableMappings وينشئ بنية تطابق بنية قاعدة البيانات .

- المتغير الثالث إختياري وهو srcTable يشير إلى الاسم المقترح للجدول الذي نريد نسخ تكوينه في الـ Dataset بغض النظر عن قيمة SchemaType .

ومثال على ذلك :

الكود التالي يبين كيف يتم إنشاء الكائن DataAdapter وتجهيزه ، واستخدام الخاصية FillSchema لتعبئة الـ DataSet بالجدول المحدد في جملة الاستعلام ) بدون تحميل أي بيانات ) ، وسوف نستخدم المتغير SchemaType.Mapped لكي نجعل DataAdapter يستعمل البنية التي حددت له من قبل TableMappings ، ومن بعد ذلك نعرض مربع رسالة تخبرنا بعدد السجلات المتوفرة في الجدول الذي تم تخزينه في DataSet للتو وذلك للتأكد من أنها تساوي صفراً ..

Dim selectCommandText As String = "SELECT * FROM Information"
Dim selectConnection As OleDbConnection = New OleDbConnection _
	("Provider=Microsoft.Jet.OLEDB.4.0;" _
	& "Data Source=|DataDirectory|\Note.mdb;" _
	& "User Id=admin;" _
	& "Jet OLEDB:Database Password=ado.net;")
Dim instance_adapter As New OleDbDataAdapter(selectCommandText, selectConnection)
Dim ds As New DataSet
instance_adapter.TableMappings.Add("Table", "Demo")
instance_adapter.TableMappings(0).ColumnMappings.Add("Name", "FirstName")
instance_adapter.FillSchema(ds, SchemaType.Mapped)
Dim strMsg As String = String.Format("Count of Records In The {0} Table = {1} .", _
ds.Tables(0).TableName, ds.Tables(0).Rows.Count)
MsgBox(strMsg, MsgBoxStyle.Information)

ولو أردنا من الخاصية FillSchema أن تجعل DataAdapter يستعمل البنية التي حددت له من قبل TableMappings ، مع إعطاء الجدول اسم مختلف ، نستبدل السطر رقم 11 بالكود التالي ..

instance_adapter.FillSchema(ds, SchemaType.Mapped , "Info")

ولو أردنا من الخاصية FillSchema أن تتجاهل البنية التي حددت له من قبل TableMappings وتنشئ بنية تطابق بنية قاعدة البيانات ، نستبدل السطر رقم 11 بالكود التالي ..

instance_adapter.FillSchema(ds, SchemaType.Source)

في هذه الحالة سوف يصبح اسم الجدول داخل الـ DataSet الاسم الافتراضي Table .

ولو أردنا من الخاصية FillSchema أن تتجاهل البنية التي حددت له من قبل TableMappings وتنشئ بنية تطابق بنية قاعدة البيانات ، مع إعطاء الجدول اسم ذو معنى أوضح ، نستبدل السطر رقم 11 بالكود التالي ..

instance_adapter.FillSchema(ds, SchemaType.Source , "Demo")

** هنا ينتهي حديثنا اليوم ، فما أصبنا من صواب فمن الله وتوفيقه ، وما أصبنا من خطأ فمن أنفسنا والشيطان ، لذلك من وجد أي أخطاء فليصححها لنا ، أو يخبرنا به كي نصححه ، مشكوراً ..

ولنأخذ قسطاً من الراحة ، لكي نستوعب هذه الجرعة من المعلومات ونصحح أخطائها إن وجدت ، ونعلق على الغير مفهوم منها ، و نكمل فيما بعد شرح ما تبقى من الدرس ، ونظراً لأن الحديث عن الكائن DataAdapter طويل و ممتع فلقد قمنا للتو بشرج جزء ، وفي موضوع درسنا القادم إن شاء الله سوف نكمل الجزء الآخر وهو الحديث عن الخاصية UpDate وما يلحق بها ..

((سبحانك اللهم وبحمدك، أشهد أن لا إله إلا أنت، أستغفرك وأتوب إليك ))

تم تعديل هذه المشاركة بواسطة yaseralshikh في 15 مارس 2007 في 18:48

1

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#87

يعطيك العافية اخوي والله شرح وافي وجميل بس عندي سؤال يمكن يكون سخيف عند الاغلب بس انا حاس حالي مشوش بهالؤال

وسؤالي انا عملت مشروعي على الاكسيس وبرنامجvb.net هل يجب استخدامms sql serverاو او mocrosoft sql server ولى ولى اتصالي بالاكسيس ماالو خل بهاي الاشياء...بصراحه افكاري مشوشة ومش عارف شو المطلوب مني قبل ماابدا بالعمل على برنامج vb.net من ناحية تهيئة الاتصال للبدا بالعمل

(ليس العيب ان تكون غبي بل العيب ان تبقى غبي)

−1

الاردن ارض النشامة..طارق حلوش

#88

أخي طارق لقد صدقت ( ليس العيب ان تكون غبي بل العيب ان تبقى غبي ) ..

من منا من لم يمر بهذا التشويش الذي تتحدث عنه ، ولكن بدرجات مختلفه ..

الـ vb.net هو لغة البرمجة التي تمكننا من القيام بالكثير من الأمور ، منها إدارة العمل مع قواعد البيانات من خلال تقنية أو معمارية ADO.NET ( إن صح التعبير ) ، وهي عبارة عن مجموعة من الفئات مشمولة في مجال الأسماء System.Data غرضها الوصول إلى مصادر البياناتData Sources والتي تمثل بيانات محفوظة تحت أنظمة قواعد بيانات متعددة الأنواع ( مثل Microsoft Office Access أو SQL Server أو Oracle ) مما يعني قدرتك على الوصول إلى أي قاعدة بيانات مهما كانت الشركة المنتجة لها . ( أ. تركي العسيري) .

خلاصة القول لا يتوجب عليك فعل إلا ما تحتاج إليه ، فإذا كان برنامجك يحتاج إلى تخزين بيانات محدوده عليك بـ Access ، أما لو كان برنامجك يحتاج إلى تخزين بيانات ضخمة فعليك SQL Server ..

وللمزيد من الوضوح حصلت لك على هذه الصورة المعبره للفرق بين الاثنين من إحدى مشاركات الأخ الفاضل ALATTAR2005 ..

AccessAndSQL.jpg

هذا والله الموفق ..

تم تعديل هذه المشاركة بواسطة yaseralshikh في 16 مارس 2007 في 19:18

1

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#89

بسم الله الرحمن الرحيم

الحمد لله رب العالمين والصلاة والسلام على رسوله الكريم صلى الله عليه وسلم

الأخ الكريم yaseralshikh بارك الله فيك وجزاك عنا خير جزاء

عندما نكتب الكود التالي

TableAdapter.Update(Dataset.Table)

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

DataSet.RejectChange

تم تعديل هذه المشاركة بواسطة abetry في 16 مارس 2007 في 23:31

اللهم لا سهل الا ماجعلته سهلا، وانت تجعل الصعب ان شئت سهلا

83_45a7168be2ddb.jpg

#90

أخي الحبيب abetry سؤالك من الأسئلة التي تستبق الأحداث ، فلقد أخبرت أنني سوف اتحدث عن Update في الجزء القادم من الدرس ( والذي أنا أعمل عليه في هذه الفترة ) ، ورغم أن الإجابة عليك تحرق علينا بعض المعلومات :lol: ، إلا أنني لن أتردد في الرد عليك ..

عندما يتم استدعاء الخاصية Update من أجل نسخ البيانات المحدثة في الـ DataSet إلى مصدر البيانات ، فإن هناك سبعة أمور تحدث خلف الكواليس ، أخرها وهو السابع يتم استدعاء الخاصية AcceptChanges التابعة للكائن DataSet ، والتي تحدثنا عنها فيما سبق بالتفصيل حيث قلنا " تقوم الخاصية AcceptChanges بإزالة المعلومات حول الحالة السابقة للبيانات ، وبالتالي لا يمكن استخدام RejectChanges لاستعادة آخر قيم للبيانات ، هذا يعني أن RejectChanges سيؤدي إلى استعادة البيانات بالحالة التي كانت عليها بعد آخر استدعاء للخاصية AcceptChanges . "

تم تعديل هذه المشاركة بواسطة yaseralshikh في 18 مارس 2007 في 06:32

1

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#91

بسم الله الرحمن الرحيم

الحمد لله والصلاة والسلام على رسول الله محمد بن عبد الله صلى الله عليه وسلم

اما بعد

فاعذرني اخي على تسرعي، وبارك الله فيك

دروسك شيقة وسلسة وسهلة وممتعة

فإذا كنت ترى ان سؤالي يحرق عليكم بعض المعلومات وانت في صدد كتابة هذا الدرس فأولى بك جعلي انتظر حتى تكمله، فأستفيد ويستفيد غيري من مريدي هذا المنتدى

أعتذر مرة اخرى

وشكرا على الاجابة

اللهم لا سهل الا ماجعلته سهلا، وانت تجعل الصعب ان شئت سهلا

83_45a7168be2ddb.jpg

#92

اخي abetry .. ربما أغضبتك ، لقد كنت أداعبك ولكنك لم تنتبه لذلك ، لذا أرجو أن تقبل اعتذاري بصدر رحب . كل ما في الأمر أنني كنت أكتب في بعض المعلومات التي كنت تسأل عنها للدرس القادم ..

تم تعديل هذه المشاركة بواسطة yaseralshikh في 20 مارس 2007 في 21:00

1

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#93

أخي yaseralshikh لم أغضب، ولكني لا اريد ان اكون متسرعاً، فطلب العلم يحتاج الى تأني وصبر :unsure:

انا متعطش الى دروسك، وخاصة عندما تصل الى tableadapter حتى امطرك بوابل من الاسئلة :rolleyes:

فتحها الله عليكم وعلينا وعلى جميع المسلمين

اللهم لا سهل الا ماجعلته سهلا، وانت تجعل الصعب ان شئت سهلا

83_45a7168be2ddb.jpg

#94

:D جزاك الله خير اخي الكريم...

أنرت لي الطريق .. أنار الله دربك

#96

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

لن تبلغ المجد حتى تلعق الصبرااااااااا

#97

الصرااااحه كنز مو درس عادي

وين اللي يثبت وين اللي يساعد في تكملة مثل هذي الدرووس الصرراااحه ثروه واندفنت

#98

بسم الله الرحمن الرحيم

أخواني ..

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

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

فلقد كتبت بداية الجزء الثاني من الدرس السابق ، لذا إنتظروني خلال بضعة أيام مع " الخاصية UpDate " ...

;)

" أخي Oxygen أضم صوتي إلى صوتك من حيث التثبيت "

-waf

1

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#99

جزاك الله خيراً على الدرس الرائع وجعله في ميزان حسناتك .

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