<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>مدونة النبهاني &#187; برمجة قواعد البيانات ADO.NET</title>
	<atom:link href="http://alnabhani.wordpress.com/category/%d8%a8%d8%b1%d9%85%d8%ac%d8%a9-%d9%82%d9%88%d8%a7%d8%b9%d8%af-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-adonet/feed/" rel="self" type="application/rss+xml" />
	<link>http://alnabhani.wordpress.com</link>
	<description>أحدث مواضيعي البرمجية والتقنية</description>
	<lastBuildDate>Sat, 28 Nov 2009 17:05:07 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ar</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='alnabhani.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/91abf77f7c013d66c6f253d8802f990d?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>مدونة النبهاني &#187; برمجة قواعد البيانات ADO.NET</title>
		<link>http://alnabhani.wordpress.com</link>
	</image>
			<item>
		<title>حقول الهوية : بين الفئات البرمجية وحقول SQL Server :</title>
		<link>http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/</link>
		<comments>http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 17:28:13 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[guid]]></category>
		<category><![CDATA[identity key]]></category>
		<category><![CDATA[key field]]></category>
		<category><![CDATA[حقل مفتاحي]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/</guid>
		<description><![CDATA[يوجد الكثير من الطرق التي لعمل حقول هوية مميزة Identity fields او ما يعرف بالمفتاح الأساسي Primary Key Filed ، من اشهرها على الاطلاق حقل الـ Autoincrement او الترقيم التلقائي ، والتي يتم فيها توليد رقم تلقائي يزيد عن اخر رقم في العداد الخاص بقيمة تكون في اغلب الاحيان 1 ، تتميز بالخفة والنحافه ، [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=142&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>يوجد الكثير من الطرق التي لعمل حقول هوية مميزة Identity fields او ما يعرف بالمفتاح الأساسي Primary Key Filed ، من اشهرها على الاطلاق حقل الـ Autoincrement او الترقيم التلقائي ، والتي يتم فيها توليد رقم تلقائي يزيد عن اخر رقم في العداد الخاص بقيمة تكون في اغلب الاحيان 1 ، تتميز بالخفة والنحافه ، وبالتالي فنحن نتوقع منها الاداء المتميز كونها تحمل قيمة رقمية صغيرة تبدأ من 1 وتصل للآلاف لكنها قد تصل الملايين كلما كبر حجم البرنامج وزاد استخدامه ، وان يكن ، فهي لاتزال ارقام صحيحه integers قد تكون مثلا 99999999999953424 وماذا يعني ذلك ؟ فلا يوجد مشاكل حتى اللحظه فما احلاها !</p>
<p>ولكن ما يعيب هذا الاسلوب هو افتقادها إلى شيء مهم للغاية ، حيث اننا في التطبيقات الكبيرة نوعا ما ، يكون اغلب اعتمادنا على الوضع المنفصل فقد نستخدم Dataset,LINQtoSQL,Entity Framework,…etc ونضيف سجلات Records وقد يتم تعديلها حتى قبل ان ترسل إلى قاعدة البيانات database ، والمشكلة التي ستحدث هنا ، ان كائنات البيانات التي بحوزتنا لن تستطيع اسناد قيمة لحقل المفتاح الأساسي ، حيث ان اصدارها يتم حكرا على قاعدة البيانات فقط ، ولن نستطيع معرفة قيمتها الا بإضافة السجلات إلى قاعدة البيانات وهنا تمكن المشكلة ، ففي التطبيقات التجارية والتطبيقات التي تعتمد على تعدد الطبقات n-tier applications ، يتم اضافة العديد من السجلات وحزمها كلها في حزمة واحده لإرسالها دفعة واحدة إلى قاعدة البيانات ، كما يتم قبل ذلك كله تبادل البيانات بين طبقتي العرض والاعمال ، ناهيك عما يدور خلف الكواليس من عمليات تحقق وسين وجيم ! </p>
<p> <span id="more-142"></span>
<p>من هنا تبرز الحاجه إلى التعرف على حقل المفتاح الاساسي بطريقة اخرى ، تكمن في اعطائه قيمة فريده تماما – دون ان نخاف من تكرارها &#8211; تسند اليه وقت ادخال البيانات في التطبيق وتنتهي بذلك المشكلة . لكن ما هي هذه القيم ؟ </p>
<p>ان حاولنا ان نقوم بإنشاء فئة خاصة بنا فذلك جيد ، لكننا قد نتعب كثيرا فيها في سبيل ضمان عدم تكرر القيمة المنشأة مع أي نسخه اخرى من الكائن من نفس الفئة في الذاكرة ، او نسخه اخرى من التطبيق ككل في جهاز آخر ، قد نحتاج إلى دالة توليد الارقام العشوائيه وندخل لها معادلة محترمة في فترة interval رقمية كبيرة جدا قد تتراوح بين 1 و 5 ملايين مثلا ،ونسندها إلى حقل المفتاح الأساسي ، لكن في برنامج يتوقع ان تكون سجلاته بأعداد كبيرة فإن احتمالية تكرار الرقم الواحد ستكون اكبر وستزداد بزيادة عدد نسخ البرنامج العاملة في الشبكة !</p>
<p>قد يقترح احدهم ان نكبر المجال ليكون إلى 20 مليون مثلا وبالتالي نضع انفسنا في امان اكثر ونكون على يقين بأن نسبه تكرار الرقم صغيرة جدا – اقسم 1 على 20 مليون ! – ومن هنا سنحتاج إلى ان يكون حقل المفتاح الاساسي من نوع خاص ، فالنوع الرقمي &#8211; اما في .net او في SQL Server &#8211; لن يحتويه في اغلب الاحيان فنحن نتحدث من منظور التطبيقات المتوسطة والكبيرة والملايين ، مما قد يدفعنا إلى استخدام حقل نصي في قاعدة البيانات ، ونوع نصي كـ String مثلا في برنامجنا ، لكن هذا النوع يعاب عليه البطء في مثل هذه العمليات ، فهذا الحقل هو المفتاح الاساسي وتعتمد عليه كل العمليات الأخرى مما يعني ان ينخفض مستوى الأداء بشكل كبير جدا جدا ويصبح العمل بطيئا للغاية .</p>
<p>نفس المشكلة سنواجهها ان فكرنا في توليد بيانات عشوائية مختلطة بالنصوص والارقام ليكون لدينا قيمة مثل s334dfgr54 ولكنها ايضا ستكون نصيه بالرغم من اننا نعرف ان نسبه التكرار ستكون ضئيلة للغاية ايضا في هذه الحالة .</p>
<p>طيب والحل ؟ </p>
<p>ينفرد SQL Server وكذلك .Net Framework بالنوعين UniquIdentifier و GUID – الاول في الاول والثاني للثاني طبعا ! – فهذا النوع يقوم بتوليد سلسلة نصية طويلة مثل التالية: </p>
<p>dc63e853-804b-4eac-b2e8-270bf1095a63</p>
<p>21c5d16d-d455-49e1-ab4a-7ff39753c4f9</p>
<p>5690757b-544f-49d8-b412-d45433f55202</p>
<p>1c7c7409-a9cf-48cd-a051-6a3a145b90c3</p>
<p>1be8fd38-785c-4628-b5f8-efab7b4d7e40</p>
<p>fc9270f6-fc6b-426e-b7d8-d4b43ec73f6a</p>
<p>4f400213-dcdc-4c91-9ec0-5ce916332be4</p>
<p>74211c09-0bb7-4eea-8944-94581545e3a3</p>
<p>cbb03156-990e-4e15-891e-96788861b8f7</p>
<p>c3b60d21-94a0-4764-866b-582b04fa9701</p>
<p>d0921672-bfff-41c1-9c17-56a76d459d66</p>
<p>3434c358-2371-4352-b16e-c72c4c138525</p>
<p>21afb37d-5981-4c7f-b6f5-0c15a8b7cda5</p>
<p>c1675a25-c365-4015-8151-16d1b2ff7271</p>
<p>ceabf72d-3076-4784-80d8-879a53e21e0c</p>
<p>55760bd0-b7bc-4b14-8b4e-b808e9cb35fe</p>
<p>فنسبه تكرار الرقم ضئيلة للغاية وقد تصل إلى – بحسب حساباتي المتواضعة – 15.78E-51 تخيل 51 خانة عشرية كلها اصفار ! اذا نسبة ضئيلة جدا جدا من التكرار ، فمن هذه الناحية نضمن عدم التكرار ، ومن ناحية نوع البيانات فهو مدعوم في اطار العمل .net وفي قاعدة البيانات SQL Server ايضا ، طيب ماذا عن السرعة ؟</p>
<p>من ناحية السرعة فلا تقلق ، فبما اننا بعدنا عن النوع String فنحن في جهة آمنة من البطء ، خصوصا ان النوع مدعوم في كلا المكانين SQL Server و .Net Framework</p>
<p>وماذا بعد ؟</p>
<p>تتوفر الفئة GUID مباشرة في فضاء الاسماء System ، والميزة التي تتمتع بها انها Shared خصوصا الدالة NewGUID التي تعود بقيمة GUID هكذا : Guid.NewGuid() ، وبالنسبة لإنشاء كائن جديد فذلك عادي جدا : </p>
<p>&#160;</p>
<p dir="ltr">
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">Guid</font><font color="#808080">               <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">               <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">               </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.Read()</font> </div>
</td>
</tr>
</tbody>
</table>
<p dir="rtl">ولكن تذكر دائما وجوب استدعاء الدالة NewGUID في حالة رغبتك بإنشاء مميز جديد ، حيث ان الكود التالي :</p>
<p dir="ltr">&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.Read()</font> </div>
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>سيعطينا نفس الناتج تماما مرتين ! والحل يكمن في استدعاء الطريقة المشتركة Guid.NewGuid في كل مرة :</p>
<p>&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">Guid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Guid.NewGuid</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.WriteLine(x)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Console</font><font color="#000000">.Read()</font> </div>
</td>
</tr>
</tbody>
</table>
<p>بهذا نكون قد انتهينا من هذا الموضوع .</p>
<p>تحياتي </p>
Posted in برمجة قواعد البيانات ADO.NET, تقنية net. Tagged: guid, identity key, key field, حقل مفتاحي <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=142&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/08/23/%d8%ad%d9%82%d9%88%d9%84-%d8%a7%d9%84%d9%87%d9%88%d9%8a%d8%a9-%d8%a8%d9%8a%d9%86-%d8%a7%d9%84%d9%81%d8%a6%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d9%8a%d8%a9-%d9%88%d8%ad%d9%82%d9%88%d9%84/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>3- استخدام الـ Entity Framework لتطوير نوافذ من النوع MasterDetails:</title>
		<link>http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/</link>
		<comments>http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:13:14 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[master details]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/</guid>
		<description><![CDATA[عندما نكون قد وصلنا إلى هذه المرحلة ، اعتقد انه قد حان الوقت لنكون قد انتهينا من الحاجه في اظهار الكثير من الخطوات ! حيث انني اود عرض الاختلافات فقط !
نقوم بداية بإضافة فئة جديدة من النوع ADO.NET Entity data Model ونسميها مثلا CustomerOrdersModel ثم يظهر امامنا المعالج طالبا منا تحديد كيفية تصميم مصدر البيانات [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=141&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>عندما نكون قد وصلنا إلى هذه المرحلة ، اعتقد انه قد حان الوقت لنكون قد انتهينا من الحاجه في اظهار الكثير من الخطوات ! حيث انني اود عرض الاختلافات فقط !</p>
<p>نقوم بداية بإضافة فئة جديدة من النوع ADO.NET Entity data Model ونسميها مثلا CustomerOrdersModel ثم يظهر امامنا المعالج طالبا منا تحديد كيفية تصميم مصدر البيانات لنطلب منه توليد النموذج بكرم من قاعدة البيانات :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01249931147.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/01249931147.png" width="448" height="480" /></a> </p>
<p>الخطوة التالية ، يطلب منك المعالج تحديد قاعدة البيانات ، قم بتحديد قاعدة البيانات Northwind بنفسك ، ثم انتقل إلى الخطوة التي بعدها وحدد الجدولين Customer,Orders ، وفي خانة الـ Namespace اكتب اسم دلالي مميز سنحتاجه لاحقا وليكن Entities ، انه المعالج بعدها ، لتفتح لك نافذة جديدة وهي نافذة الـ ModelDesigner ، طبعا لا حاجه لك في تعديل أي شيء هناك :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/11249931147.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/11249931147.png" width="448" height="480" /></a> </p>
<p>&#160;</p>
<p>لكنني اود اخبارك بأنه يفضل ل كان تغير قيمة الخاصية Entity Container Name والتي تمثل اسم الفئة الحاضنة لجداول قاعدة البيانات ، فهي التي سنستخدمها دوما في اكوادنا ، ففي حالة احتواء مشروعك على عدة نماذج Models من هذا النوع فقد يتكرر الاسم عليك ويسبب لك شيء من الارتباك البرمجي .</p>
<p>الآن توجه إلى النافذة الجديدة Form1 لنقوم بتطوير نافذة Master Details من النوع Full Details ، سنحتاج اولا إلى اضافة الـ DataSource ، وهنا تشترك الطريقتان LINQ-to-SQL و EntityFramework في كون الطريق هي نفسها ، حيث تختار ان يكون مصدر البيانات هو كائن Object ثم تحدد الفئة Customer وتنهي المعالج كالعادة لتجد الفئات قد وجدت على شكل جداول في النافذة Datasources ، قم بعدها بسحب الجدول Customer على شكل Details إلى النافذة from1 ثم الجدول Orders الفرعي التابع له النافذة ايضا ! بعدها انتقل مباشرة إلى نافذة محرر الاكواد حيث اننا سنحتاج إلى كتابة سطيرات برمجي بسيطة :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Public</font><font color="#808080">&#160;</font><font color="#0000ff">Class</font><font color="#808080">&#160;</font><font color="#000000">Form1</font><font color="#808080">             <br />&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">ent</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">Entities</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">Form1_Load(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080"> _ </font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080">&#160;</font><font color="#0000ff">MyBase</font><font color="#000000">.Load</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.DataSource</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">ent.Customers.Include(</font><font color="#808080">&quot;Orders&quot;</font><font color="#000000">)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem_Click(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080"> _ </font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem.Click</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.ent.SaveChanges()</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
</p>
<p>حيث نقوم اولا بتعريف كائن جديد من النوع Entities وهي الفئة التي تحضن باقي فئات الجداول في الـ Entity Framework ، وفي حدث التحميل نقوم باسناد قيمة إلى الكائن BindingDataSource ولكن هنا لدي ملاحظه مهمه جدا ، وهي ضرورة استخدام الطريقة Inculde وارسال إسم الجدول المرتبط معها ، حيث لو كتبت ent.Customers فإن سجلات الجدول الفرعي Orders لن تظهر وانما ستظهر البيانات الاساسية فقط من الجدول الاب Customers .</p>
<p>وبالنسبة لحفظ التعديلات فكما نلاحظ فإننا لا نحتاج إلا إلى مناداة الطريقة SaveChanges حتى يتولى عنك خلفان وعباس وحمدان القيام بالباقي !</p>
<p>بالنسبة لتطوير نموذج من النوع Lookup List فلا اعتقد انك ترغب في اعادة كل السطور من الدرسين الماضيين وتغيير كلمه واحده فقط في كل مره !</p>
Posted in برمجة قواعد البيانات ADO.NET Tagged: ado.net, entity framework, master details <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/141/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=141&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/08/10/3-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-%d8%a7%d9%84%d9%80-entity-framework-%d9%84%d8%aa%d8%b7%d9%88%d9%8a%d8%b1-%d9%86%d9%88%d8%a7%d9%81%d8%b0-%d9%85%d9%86-%d8%a7%d9%84%d9%86%d9%88%d8%b9-master/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249931147.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/11249931147.png" medium="image" />
	</item>
		<item>
		<title>Master Details &#8211; الجزء الثاني : استخدام Dataset</title>
		<link>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/</link>
		<comments>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:35:00 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[dataset]]></category>
		<category><![CDATA[master details]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/</guid>
		<description><![CDATA[1- استخدام الـ Dataset :
سافترض بانك تعرف كيفية اضافة مصادر البيانات فلن اضع صورا هنا ، سنقوم اولا باضافة مصدر البيانات من خلال القائمة Data &#124; Add New Data Source ومن هناك نحدد قاعدة البيانات Northwind ونختار الجدولين Customers و Orders فقط ثم ننهي المعالج .
عمل الـ Full Details Form :
نتوجه بعدها إلى النافذة Form1 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=138&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h1>1- استخدام الـ Dataset :</h1>
<p>سافترض بانك تعرف كيفية اضافة مصادر البيانات فلن اضع صورا هنا ، سنقوم اولا باضافة مصدر البيانات من خلال القائمة Data | Add New Data Source ومن هناك نحدد قاعدة البيانات Northwind ونختار الجدولين Customers و Orders فقط ثم ننهي المعالج .</p>
<h5>عمل الـ Full Details Form :</h5>
<p>نتوجه بعدها إلى النافذة Form1 لنقوم بالعمل عليها ، وارجو منكم التركيز جيدا هنا .</p>
<p>1- توجه إلى القائمة Data | Show Data Sources او اضغط على shift+alt+d ستظهر لك النافذة بالشكل التالي :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249038154.png" /> </p>
<p>لاحظ من هناك وجود الجدولين Customers و Orders ، ينبثق من كل منهما الحقول التابعة لهما والميزة هنا هو امكانيه اختيار الاداة التي يتم عرض بيانات الحقل بها ، حتى الجدول نفسه يمكن تحديد ما اذا كنت تود عرضه بطريقة الجدول Grid او التفاصيل details .</p>
<p>من اهم الامور هنا هو وجود الجداول المتربطة بشكل متداخل ، فلاحظ من الصورة السابقة وجود الجدول Orders مرتين ، الاولى بشكل تابع للجدول Customers والثانية بشكل مستقل عنه ، تبعية الجدول Orders للجدول Customers من خلال العلاقة التي بينهما ( One-to-Many ) يعني امكانيه عرض السجلات التابعة لكل سجل بشكل سهل جدا . هذا ما سنشاهده بعد قليل فلا تخف.</p>
<p>قم بالضغط على الجدول Customers وستنبثق لك قائمة صغيرة لتحدد طريقة العرض اختر منها details كما بالشكل التالي :</p>
<p>&#160;</p>
<p>&#160;<img src="http://www.vb4arab.com/vb/uploaded/486/01249039340.png" /> </p>
<p>الآن الخطوة الاكثر اثارة واهمية ، وهي سحب الجدول Custometrs إلى النافذة form1 وتركه هناك ، سيقوم Visual Studio بتوليد كل الادوات والاكواد المطلوبة لعرض البيانات وربطها والتنقل بينها &#8230; الخ كما بالصورة التالية :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039561.png" /> </p>
<p>لو قمت بتشغيل التطبيق الآن ، ستلاحظ ظهور البيانات بشكل جميل ومرتب مع امكانية التنقل بين السجلات بسهولة ، فضلا عن امكانيه الاضافة والحذف والحفظ ايضا .</p>
<p>لم ينته عملنا بعد ، فنحن نريد اضافة الجدول Orders التابع للجدول Customers ، وارجو ان لا تخلط هنا مع الجدول Orders المستقل لأنه لن يفيدنا ، لذلك قم بسحل الجدول Orders الفرعي إلى النافذة ايضا وشاهد النتيجة :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039636.png" width="492" height="480" /> </p>
<p>لو قمت الان بتجربة البرنامج ، ستجده يعمل بالشكل المطلوب تماما ، فبمجرد عرض سجل من الجدول customers في الاعلى ، يتم عرض السجلات المرتبطة به من الجدول Orders مباشرة في الاداة DataGrid في الاسفل مباشرة .</p>
<p>اذا كنت تستخدم الاصدار 2008 فقد اتممت كل الامور الضرورية المطلوبة ، اما في الاصدار 2005 و .net framework 2.0 فأنت بحاجه إلى اضافة بعض السطور في كود الحفظ من الـ BindingNavigator فهنا يتم تحديث كل جدول على حده للأسف ، لذلك ستجد كودا مثل :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersTableAdapter.Update(CustomerOrdersDataset.Customers)</font> </div>
</td>
</tr>
</tbody>
</table>
<p>وهذا يعني تحديث بيانات الجدول Customers فقط دون الجدول Orders المرتبط به ، لذلك اضف بعض السطور ليصبح الكود النهائي بالصورة التالية :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersTableAdapter.Update(CustomerOrdersDataset.Customers)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.OrdersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.OrdersTableAdapter.Update(CustomerOrdersDataset.Orders)</font> </div>
</td>
</tr>
</tbody>
</table>
</p>
<p>بينما في الاصدارات الاحدث من اطار العمل وكذلك فيجوال ستوديو ، يتم توليد الفئة TableAdapterManager يقوم بإدارة كل الكائنات من النوع tableAdapter والعمل عليها دفعة واحدة ! فكود الحفظ سيكون مولدا تلقائيا بالشكل التالي :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem_Click(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080"> _</font></div>
<div class="code"><font color="#000000">CustomersBindingNavigatorSaveItem.Click</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.TableAdapterManager.UpdateAll(</font><font color="#0000ff">Me</font><font color="#000000">.CustomerOrdersDataset)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
<p>حركة اخيرة احبها في هذا النوع من النوافذ وهو استخدام عجلة الفأرة MouseWheel للانتقال بين السجلات حيث نضيف الكود التالي في حدث الـ MouseWheel التابع للنافذة Form مباشرة :</p>
<p>&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">Form1_MouseWheel(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.Windows.Forms.MouseEventArgs)</font><font color="#808080">&#160;&#160; </font><font color="#0000ff">Handles </font><font color="#0000ff">Me</font><font color="#000000">.MouseWheel</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">If</font><font color="#808080">&#160;</font><font color="#000000">e.Delta</font><font color="#808080">&#160;</font><font color="#000000">&gt;</font><font color="#808080">&#160;</font><font color="#800000">0</font><font color="#808080">&#160;</font><font color="#0000ff">Then</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.MovePrevious()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">ElseIf</font><font color="#808080">&#160;</font><font color="#000000">e.Delta</font><font color="#808080">&#160;</font><font color="#000000">&lt;</font><font color="#808080">&#160;</font><font color="#800000">0</font><font color="#808080">&#160;</font><font color="#0000ff">Then</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.MoveNext()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">If</font><font color="#808080">             <br />&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
<p>بهذا نكون قد انهينا نافذة من النوع Detail view .</p>
<h2>بناء نافذة من النوع Lookup :</h2>
<p>هنا قم بإضافة نافذة جديدة فارغة إلى مشروعك ، وتوجه إلى نافذة الـ Datasources وحدد الجدول Customers وقم بتحديد النوع None لكل الحقول ، فلا نريد عرض سوى حقل واحد وهو ContactTitle حيث نريد عرض اسم الـ contact فقط ، وبالنسبة لهذا الحقل ، اختر الاداة ListBox :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039679.png" /> </p>
<p>الآن قم بسحب الجدول customers عن بكرة أبيه إلى النافذة Form ، ستلاحظ توليد الـ BindingNavigator وكل المكونات الاخرى ، وتوليد اداة ListBox فارغة ، قم بالنقر في الزر العلوي منها كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039794.png" /> </p>
<p>&#160;</p>
<p>قم بتفعيل الخيار Use data bound items ، وستتغير تلك النافذة الصغيرة لتظهر عدة خيارات اضافية بها ، يهمنا منها الخاصية Datasource ، اختر منها CustomerBindingSource كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039856.png" /> </p>
<p>&#160;</p>
<p>وبالنسبة للخاصية DisplayMember اختر الحقل ContactName التابع للـ customerBindingSource دون غيره :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039906.png" /> </p>
<p>&#160;</p>
<p>الآن قم بتعيين قيمة الخاصية dock التابعة للاداة Listbox لتكون Left حيث اننا نود عرضها بالجانب الايسر في هذه الحالة – وفي حالة كون التطبيق باللغة العربية اجعله Right لاتنسى رجاءا ! – بعدها توجه مرة اخرى إلى النافذة DataSources وقم بسحب الجدول Orders الفرعي – التابع لـ Customers – إلى النافذة مباشرة وقم بضبط الخاصية Dock لها لتكون fill ، شغل بعدها البرنامج مباشرة وشاهد النتيجة بنفسك :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" width="496" height="335" /></a> </p>
<p>&#160;</p>
<p>حيث يظهر لك في الاداة ListBox الحقل ContactName وبمجرد اختيار احد القيم من هناك يتم عرض البيانات الفرعية التابعة له من الجهة اليمنى في الاداة DataGridView .</p>
<p>تبقى فكرة الحفظ نفسها التي طبقناها في المرة السابقة مع النوع الاخر من النوافذ وذلك في حالة كونك تستخدم VS2005,.net 2.0 .</p>
<p>بهذا نكون انتهينا من عرض طريقة استخدام الـ Dataset في انشاء نوافذ تعرض البيانات بطريقة Master Details .</p>
Posted in برمجة قواعد البيانات ADO.NET Tagged: ado.net, dataset, master details <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=138&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249038154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039340.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039561.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039636.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039679.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039794.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039856.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039906.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" medium="image" />
	</item>
		<item>
		<title>Master Details اختلفت مصادر البيانات والنتيجة واحدة !</title>
		<link>http://alnabhani.wordpress.com/2009/07/27/master-details-intro/</link>
		<comments>http://alnabhani.wordpress.com/2009/07/27/master-details-intro/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 05:58:47 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/?p=132</guid>
		<description><![CDATA[في هذه السلسلة البسيطة من المقالات ، نلقي الضوء على كيفية عمل نماذج تعتمد  طريقة الابن والابن MasterDetails ، ولمن لا يعرفها هو كيفية عرض بيانات مرتبطة ،  حيث يتم عرض سجل من الجدول الاب والسجلات الفرعية التابعة له في الجدول الإبن ،  وسيكون التركيز هنا على كيفية استخدام مصادر البيانات المختلفة [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=132&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>في هذه السلسلة البسيطة من المقالات ، نلقي الضوء على كيفية عمل نماذج تعتمد  طريقة الابن والابن MasterDetails ، ولمن لا يعرفها هو كيفية عرض بيانات مرتبطة ،  حيث يتم عرض سجل من الجدول الاب والسجلات الفرعية التابعة له في الجدول الإبن ،  وسيكون التركيز هنا على كيفية استخدام مصادر البيانات المختلفة في عمل هذا النوع من  النماذج دون الغوص في أعماق الربط Binding والحركات البرمجية والرتوش حيث ان ذلك  موضوع آخر.</p>
<p><span id="more-132"></span></p>
<p>وقبل البدء في الغوص في الامور البرمجية وتقنيات التطوير الخاصة بها ، سنعرض  مخطط البيانات للجداول المستخدمة ، حيث سنستخدم الجدولين Customer,Orders من قاعدة  البيانات Northwind ويظهر ذلك كما يلي :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01248673709.png"><img class="alignnone" title="data" src="http://www.vb4arab.com/vb/uploaded/486/01248673709.png" alt="" width="490" height="346" /></a></p>
<h1>تقنيات الوصول إلى البيانات :</h1>
<p>قبل حوالي 4 سنوات من الآن ، كانت هذه الفقرة عديمة الفائدة تقريبا ، خصوصا اننا  كنا محكورين بإستخدام الـ Dataset فقط لوصول المباشر ، او الـ WebServices للوصول  البعيد – وهو خارج نطاق موضوعنا هنا – اما اليوم فقد تعدل الوضع كثيرا واصبح لدينا  Dataset,LINQtoSQL,Entity Framework فقد تعددت الخيارات بشكل واضح . الفروقات بينها  قد ناقشناها سابقا على <a href="../2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/" target="_blank">الرابط التالي</a> ، غير انني انوه الى ان تقنية كتل البيانات Entity  Framework يعيبها البطء مقارنة بالتقنيتين الآخريين ، لذلك ضع في بالك اي التقنيات  افضل في حالتك .</p>
<p>وقبل ان نختم حديثنا اود التطرق اولا إلى الشكل العام من النماذج forms الذي  سنستخدمه في عرض البيانات ، حيث الطريقة الاولى وهي الاكثر شهرة بعرض كل البيانات  من الجدول الاب وعرض البيانات الفرعية على شكل Grid وهو ما يعرف بالـ Full Details  form :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/11248673709.png"><img class="alignnone" title="full details form" src="http://www.vb4arab.com/vb/uploaded/486/11248673709.png" alt="" width="531" height="441" /></a></p>
<p>اما الطريقة الثانية ، والتي نشاهدها في الكثير من التطبيقات التجارية ، فهي عرض  حقل اساسي من الجدول الاب في List والسجلات الفرعية في Grid وهو ما يعرف بالـ  Lookup From او الـ List Form :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/21248673709.png"><img class="alignnone" title="list details" src="http://www.vb4arab.com/vb/uploaded/486/21248673709.png" alt="" width="587" height="424" /></a></p>
<p>في المقال التالي ، سنقوم بمناقشة كيفية استخدام الـ Dataset في عمل Master  Details Form بالشكلين السابقين ، وحتى نلتقي عنده ، استودعكم الله .</p>
Posted in برمجة قواعد البيانات ADO.NET  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/132/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/132/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/132/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=132&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/07/27/master-details-intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01248673709.png" medium="image">
			<media:title type="html">data</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/11248673709.png" medium="image">
			<media:title type="html">full details form</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/21248673709.png" medium="image">
			<media:title type="html">list details</media:title>
		</media:content>
	</item>
		<item>
		<title>هل تعلم ما هو اطار عمل كيان البيانات Entity Framework ؟</title>
		<link>http://alnabhani.wordpress.com/2009/07/22/%d9%87%d9%84-%d8%aa%d8%b9%d9%84%d9%85-%d9%85%d8%a7-%d9%87%d9%88-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d9%8a%d8%a7%d9%86-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-entity-framework/</link>
		<comments>http://alnabhani.wordpress.com/2009/07/22/%d9%87%d9%84-%d8%aa%d8%b9%d9%84%d9%85-%d9%85%d8%a7-%d9%87%d9%88-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d9%8a%d8%a7%d9%86-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-entity-framework/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 12:25:38 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[ado.net entity framework]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/07/22/%d9%87%d9%84-%d8%aa%d8%b9%d9%84%d9%85-%d9%85%d8%a7-%d9%87%d9%88-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d9%8a%d8%a7%d9%86-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-entity-framework/</guid>
		<description><![CDATA[

في إحدى الرسائل التي وصلتني إلى بريدي من فترة ، رسالة من احد الإخوة يقول فيها : &#34; السلام عليكم أبو تقنيات جديدة ! &#34; ضحكت كثيرا عندما قرأتها ، فقد كانت مضحكه جدا ، ودفعني إلى مراجعة مقالاتي ومدوناتي التي كتبتها، فوجدت ان اغلبها يتحدث عن التقنيات الجديدة التي تظهر بين الفينة والاخرى ! [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=131&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><b></b><b></b></p>
<p><b></b></p>
<p><b>في إحدى الرسائل التي وصلتني إلى بريدي من فترة ، رسالة من احد الإخوة يقول فيها : &quot; السلام عليكم أبو تقنيات جديدة ! &quot; ضحكت كثيرا عندما قرأتها ، فقد كانت مضحكه جدا ، ودفعني إلى مراجعة مقالاتي ومدوناتي التي كتبتها، فوجدت ان اغلبها يتحدث عن التقنيات الجديدة التي تظهر بين الفينة والاخرى ! فأجبته قائلا : نعم اذا كنا سنعتمد على تقنيات من انتاج شركة مايكروسوفت ، فاعلم انه يتوجب علينا اللهث وراء تلك التقنيات لأنها تظهر بشكل أسي بالمعادة </b><b>F(x) = e^x</b><b> ههههه .</b></p>
<p> <span id="more-131"></span>
<p><b></b></p>
<p><b>عموما ، نتحدث اليوم عن تقنية اخرى – كالعادة &#8211; ،وهي موجهه للتعامل مع قواعد البيانات ، فإذا كنت من مغرمي برمجة قواعد البيانات فانصحك بمتابعة هذه المقالة والتعرف على الـ </b><b>Entity Framewrok</b><b> .</b></p>
<p><b></b></p>
<p><b>يعد اطار العمل </b><b>Entity Framework</b><b> احدى الطرق المضمنه في تقنية </b><b>ADO.NET</b><b> للتعامل مع البيانات في الوضع المنفصل ، فهذه التقنية هي أخت للـ </b><b>Dataset</b><b> ، فقد ولت تلك الايام التي نستخدم فيها الـ </b><b>Dataset</b><b> حكراً رغما عنا ، فقد اصبح باليد الاختيار بين عدة تقنيات : </b><b>Dataset,Entity Framework,LINQtoSQL…</b><b> وغيرها من التقنيات التي تظهر يوما بعد يوم . ومن منطلق ان نعرف ما حولنا ومالنا وما علينا ، يتوجب علينا التعرف على هذه التقنية .</b></p>
<p><b></b></p>
<p><b>تقنية الـ </b><b>Entity Framework</b><b> تقوم بتغليف جداول قاعدة البيانات بفئات تتضمن طرق وخصائص تمثل كائنات قاعدة البيانات ، بمعنى لو كان لديك جدول بالإسم </b><b>Persons</b><b> وبه حقول كـ </b><b>PersonID,FirstName,LastName,…etc</b><b> فإن هذه التقنية ستقوم بتوليد فئة </b><b>Class</b><b> بالإسم </b><b>Persons</b><b> به حقول بنفس اسم حقول الجدول </b><b>Persons</b><b> في قاعدة البيانات ، بإختصار ، تقوم هذه التقنية بإنشاء نموذج </b><b>Model</b><b> لكائنات قاعدة البيانات ، موفرة عليك بذلك الكثير من الجهد خصوصا عندما نتكلم عن تطبيقات متعددة الطبقات </b><b>N-Tier Applications</b><b> .</b></p>
<p><b></b></p>
<p><b>من ميزات هذه التقنية ، هو ان نموذج البيانات </b><b>Data Model</b><b> الموجود لديك ، لا يشترط ان يكون مطابقاَ لما هو موجود في قاعدة البيانات ، بمعنى اخر ، بإمكانك تخصيص شكل نموذج البيانات ليكون مختلفا عما هو في قاعدة البيانات ، يتحدد هذا على الطريقة التي استخدمتها في تخطيط قاعدة بياناتك وتوزيع الجداول والحقول فيها ، ستتضح الصورة من هذا لاحقا إن شاء الله .</b><b></b></p>
<p><b></b></p>
<p><b>وبالنسبة للعلاقات بين الجداول ، فهناك ما يدعى بالـ </b><b>NavigationProperties</b><b> ، وهي تمثيل للجدول المرتبط بالجدول الحالي ، فلو كان لدينا جدول اب به حقل مرتبط بالجدول الابن ، فإن الحقل الموجود في الجدول الاب لن يظهر بل سيظهر بدل عنه مباشرة خاصية ابحار </b><b>NavigationProperty</b><b> للوصول إلى البيانات المرتبطه ، هذا الامر سيتضح اكثر باخذ مثال فلا تقلق نفسك كثيرا .</b></p>
<p><b></b></p>
<p><b>ميزة اخرى في هذه التقنية ، لو أنك قد استخدمت </b><b>LINQtoSQL</b><b> لكنت قد اعجبت بالـ </b><b>O/R Designer</b><b> وكيف يحول الجداول والـ </b><b>Stored Procedures</b><b> الخاصة بقاعدة بيانات من نوع </b><b>SQL Server</b><b> مباشرة إلى كائنات برمجية : فئات وطرق </b><b>Classes,Methods</b><b> &#8230; الخ ويصبح بإمكانك استخدام </b><b>LINQ</b><b> مباشرة في الاستعلام عن البيانات وتعديلها واضافتها وحذفها ،، فإنني متأكد من اغرامك بها ولحسن الحظ فيوجد لدينا ايضا ما يدعى بالـ </b><b>ADO.NET Entity Model</b><b> ليحاكي الجداول ويقوم بتوليد كل شيء نيابه عنك .</b></p>
<p><b></b></p>
<p><b>تطبيق عملي على هذه التقنية :</b></p>
<p><b>قم بإنشاء مشروع جديد ، اضف إليه عنصرا جديدا من النوع </b><b>ADO.NET entity Data Model</b><b> وسمه بالإسم </b><b>NorthwindEntityModel</b><b> </b><b>مثلا ، سيظهر لك معالج اول صفحاته تسألك عن طريقة انشاء الـكيان </b><b>Entity</b><b> هل هي من قاعدة بيانات </b><b>Generate From Database</b><b> ام نموذج فارغ </b><b>Empty Model</b><b> . الاول يكون افضل في حالة كونك ترغب في عمل نموذج مطابق لقاعدة البيانات ، اما الخيار الآخر ، فهو يترك لك حرية تصميم الـ </b><b>Conceptual Model</b><b> بنفسك ثم تربطة بقاعدة البيانات وذلك عندما ترغب في تصممي نموذج هيكل بناؤه مختلف عن قاعدة البيانات . </b></p>
<p><b></b></p>
<p><b>في حالتنا نختار الخيار الاول ، ثم نتوجه إلى الخطوة التالية وهي تحديد قاعدة البيانات المصدر ، وقد تتفاجأ هنا ايضا بأن نوع قاعدة البيانات المصرح بها هو </b><b>SQL Server</b><b> فقط حتى هذا الوقت – على الاقل لدي – على أمل ان يدعم هذا المعالج قواعد البيانات الاخرى كالـ </b><b>Dataset</b><b> تماما . ساختار هنا قاعدة البيانات </b><b>Northwind</b><b> . </b></p>
<p><b></b></p>
<p><b>الخطوة التالية هي تحديد عناصر قاعدة البيانات التي تود تمثيلها ، فستجد كل الجداول </b><b>Tables</b><b> ، استعلامات العرض </b><b>Views</b><b> ، الاجراءات المخزنة </b><b>Stored Procedures</b><b> . في حالتنا ، نختار الجداول </b><b>Products,Orders,OrderDetails</b><b> ثم ننهي المعالج .</b></p>
<p><b></b></p>
<p><b>الآن ستظهر لك نافذة مصمم كيان البيانات </b><b>Data entity Designer</b><b> تمثيل للجداول التي حددناها سابقا . الآن قم بالتمعن في تلك الكائنات ، ستجد اولا ان العلاقات بين الجداول – عفواً اقصد الفئات ! – موضح بشكل جميل جدا ، وكذلك نوع هذه العلاقة ( واحد لواحد </b><b>One to One</b><b> ، واحد لمتعدد </b><b>One to Many</b><b> ، الخ ) </b><b></b><b>كما بالشكل التالي :</b></p>
</p>
<p><img src="http://vb4arab.com/vb/uploaded/486/01248153621.png" width="509" height="322" /> </p>
<p><b>المخطط الذي أمامك يتكون من مجموعة كتل بيانات </b><b>entities</b><b> ، الجزء السفلي من كل </b><b>entity</b><b> يحتوي على الـ </b><b>Navigation Properties</b><b> &quot;خصائص التنقل &quot; تساعدنا على التعامل مع الفئات المرتبطة بعلاقات </b><b>Relation </b><b>فيما بينها – تمثيل لعلاقات قاعدة البيانات . </b></p>
<p><b></b></p>
<p><b>النافذة </b><b>Model Browser</b><b> تساعدك على تصفح وجهي العملة : النموذج </b><b>Model</b><b> ومخزن البيانات – قاعدة البيانات .</b></p>
<p><b></b></p>
<p><b>الان نغلق هذه النافذة ونتوجه إلى النافذة </b><b>form1</b><b> – او كما سميتها لدي </b><b>MainForm</b><b> ، وضع بها اداة </b><b>DataGridView</b><b> حتى نختبر بعض العمليات في عرض البيانات عليها ، في محرر الاكواد تحديد الحدث </b><b>Form_Load</b><b> اكتب كودا مثل :</b></p>
</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">Bill</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">Entities</font><font color="#808080">              </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.DataGridView1.DataSource</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Bill.Orders</font> </div>
</td>
</tr>
</tbody>
</table>
<p><b>الفئة </b><b>Entities</b><b> هي التي تحضن كل الفئات الاخرى المولدة من ال </b><b>NorthwindEntityModel</b><b> ويمكن تغيير اسمها من الخلال الخاصية </b><b>EntityContainerName</b><b> في الـ </b><b>Entity Designer</b><b>. </b></p>
<p><b></b></p>
<p><b>الآن الباب مفتوح أمامك للقيام بالكثير من الأمور ، نبدأ اولا بإظهار بيانات محددة في الـ </b><b>DataGrid</b><b> كما يلي :</b></p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">Bill</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">Entities</font><font color="#808080">              </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">SpecialOrders</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">From</font><font color="#808080">&#160;</font><font color="#000000">x</font><font color="#808080">&#160;</font><font color="#0000ff">In</font><font color="#808080">&#160;</font><font color="#000000">Bill.Orders</font><font color="#808080">&#160;</font><font color="#000000">_</font><font color="#808080">              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">Where</font><font color="#808080">&#160;</font><font color="#000000">x.OrderID</font><font color="#808080">&#160;</font><font color="#000000">&gt;</font><font color="#808080">&#160;</font><font color="#800000">11000</font><font color="#808080">&#160;</font><font color="#000000">_</font><font color="#808080">              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Select</font><font color="#808080">&#160;</font><font color="#000000">x.OrderID,</font><font color="#808080">&#160;</font><font color="#000000">x.OrderDate,</font><font color="#808080">&#160;</font><font color="#000000">x.ShipCity</font><font color="#808080">              </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.DataGridView1.DataSource</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">SpecialOrders.ToList</font> </div>
</td>
</tr>
</tbody>
</table>
<p><b>حيث قمنا بعمل استعلام </b><b>LINQ</b><b> بالاسم </b><b>SpecialOrders</b><b> حددنا فيه معيار ان يكون الحقل </b><b>OrderID</b><b> اكبر من 11000 وقمنا فيه بتحديد عرض الحقول </b><b>OrderID,OrderDate,ShipCity</b><b> .</b></p>
<p><b></b></p>
<p><b>الآن يجب ان نفهم اكثر بناء الفئات ، جرب استكشفات اعضاء الكائن </b><b>Bill</b><b> في الكود السابق ، ستجد ان هناك فئات تمثل الجداول المختلفة فضلا عن طرق مثل الطريقة </b><b>AddToXXX</b><b> والتي قد تكون </b><b>AddToOrders</b><b> والجداول الاخرى ،تسهل علينا اضافة كائن جديد إلى الفئة </b><b>Orders</b><b> وبالتالي الجدول </b><b>Orders</b><b> ! بهذه الطريقة تختصر كتابة عشرات الاسطر لتمثيل الجداول إلى كائنات ووضعها في فئات </b><b>Classes</b><b> وكتابة طرق مختلفة للإضافة والتعديل والحذف &#8230; الخ ! ارتك لك استكشاف باقي الاعضاء بنفسك .</b></p>
<p><b></b></p>
<p><b>من الامور التي احبها في الـ </b><b>Entity</b><b> هي انها قابلة لاستعراض البيانات بالربط </b><b>Binding</b><b> وذلك كما يلي :</b></p>
<p><b>- </b><b>اذهب إلى القائمة </b><b>Data</b><b> واختر منها </b><b>Add New Data Source</b><b> ، من اول صفحة تظهر لك تختار مصدر البيانات ليكون </b><b>Object</b><b> بدلا من </b><b>Database</b><b> .</b><b></b></p>
<p><b>- </b><b>في الصفحة التالية تظهر لك الفئات الفرعية </b><b>Orders,Products</b><b> لتصبح قادرا على اضافتها لتكون </b><b>Datasource</b><b> في مشروعك ! نفترض اضافة الفئة </b><b>Products</b><b> .</b><b></b></p>
<p><b>- </b><b>ستجد في النافذة </b><b>Datasources</b><b> انه قد تم اضافة تلك الفئة واي فئة مرتبطة ( أي علاقة بين الجداول المعنية ) كما بالشكل التالي :</b><b></b></p>
<p><img src="http://vb4arab.com/vb/uploaded/486/11248153621.png" /> </p>
<p><b>الآن جرب ان تذهب إلى مصمم النافذة </b><b>MainForm</b><b> وقم بسحب الفئة </b><b>Products</b><b> إلى النافذة </b><b>MainForm</b><b> ، ستحتاج بعدها فقط إلى اضافة سطر واحد كهذا :</b></p>
</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.ProductsBindingSource.DataSource</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Bill.Products</font> </div>
</td>
</tr>
</tbody>
</table>
<p><b>شغل برنامجك لتجد ان البيانات ظهرت كما يجب .</b></p>
<p><b></b></p>
<p><b>يمكنك الاستعلام في تلك البيانات بالطريقة التالية :</b><b></b></p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#808080">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">Bill</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">Entities</font><font color="#808080">              </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">SpecialProducts</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">From</font><font color="#808080">&#160;</font><font color="#000000">myOrder</font><font color="#808080">&#160;</font><font color="#0000ff">In</font><font color="#808080">&#160;</font><font color="#000000">Bill.Products</font><font color="#808080">&#160;</font><font color="#000000">_</font><font color="#808080">              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#000000">Where</font><font color="#808080">&#160;</font><font color="#000000">myOrder.CategoryID</font><font color="#808080">&#160;</font><font color="#000000">&gt;</font><font color="#808080">&#160;</font><font color="#800000">6</font><font color="#808080">&#160;</font><font color="#000000">_</font><font color="#808080">              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Select</font><font color="#808080">&#160;</font><font color="#000000">myOrder</font><font color="#808080">              </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.ProductsBindingSource.DataSource</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">SpecialProducts</font> </div>
</td>
</tr>
</tbody>
</table>
<p><b>ويتضح لنا سهوله الاستعلام في البيانات بإستخدام </b><b>LINQ</b><b> مباشرة .</b></p>
<p><b></b></p>
<p><b>من ميزات اطار كتل البيانات </b><b>Entity Framework</b><b> ، هو انك تستطيع التحكم بكمية البيانات المنقولة بسهولة ، فعندما نحتاج إلى تعديل على جدول واحد فقط دون الجداول الفرعية المرتبطة به فإننا نستدعي الجدول الأساسي فقط ، لتوضيح هذا سأسرد مثالا سريعا : </b></p>
<p><b>الجدول </b><b>Products</b><b> مرتبط بالجدول </b><b>Orders</b><b> ، فيوجد بينهما علاقة واحد لمتعدد </b><b>One-to-Many</b><b> فلو قمنا بإسناد الجدول </b><b>Products</b><b> مثلا إلى كائن </b><b>BindingSource</b><b> ليكون هو مصدر البيانات </b><b>DataSource</b><b> فيه ، فنحن مخيرون هل نضيف الجدول </b><b>Orders</b><b> ايضا ام لا ، فإذا كنا نحتاجه سنكتب اسم الجدول </b><b>Products</b><b> متبوعا بالطريقة </b><b>Include</b><b> ونعطيها اسم الجدول </b><b>Orders</b><b> ليتم تحميل بيانات الجدولين معا ، هذه الطريقة مهمة جدا في تخفيف الضغط على مزودات البيانات والشبكة التي يعمل عليها التطبيق ، فبدل ان تقوم بتحميل البيانات وانت لا تحتاج اليها اساسا ، يمكنك ان تقوم بتحميل البيانات التي تحتاج اليها فقط وتقلل بالتالي من الاعباء المحتملة على مزود البيانات </b><b>Data Server</b><b> في الشبكة </b><b>Network</b><b> .</b></p>
<p><b></b></p>
<p><b>بهذا نكون قد انتهينا من الحديث بشكل مختصر اتمنى انني قد وفقت في عرضه عليكم ، بإنتظار تعليقاتكم على مدونتي . </b></p>
Posted in برمجة قواعد البيانات ADO.NET, تقنية net. Tagged: ado.net, ado.net entity framework <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=131&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/07/22/%d9%87%d9%84-%d8%aa%d8%b9%d9%84%d9%85-%d9%85%d8%a7-%d9%87%d9%88-%d8%a7%d8%b7%d8%a7%d8%b1-%d8%b9%d9%85%d9%84-%d9%83%d9%8a%d8%a7%d9%86-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-entity-framework/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://vb4arab.com/vb/uploaded/486/01248153621.png" medium="image" />

		<media:content url="http://vb4arab.com/vb/uploaded/486/11248153621.png" medium="image" />
	</item>
		<item>
		<title>هل استخدم Dataset ام LINQtoSQL ؟</title>
		<link>http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/</link>
		<comments>http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 06:07:33 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[dataset]]></category>
		<category><![CDATA[linqtosql]]></category>
		<category><![CDATA[ntier]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/</guid>
		<description><![CDATA[مع كثر هذه التقنيات ، يقل العبئ البرمجي والذهني على البرمج ، لكن الضريبة هي تعلم تقنية جديدة كل يوم ومعرفة اي تقنية يجب ان يستخدم في الحالة التي يواجهها ، خصوصا ان هناك تقنيات كثيرة تصب في نفس الجانب ولكن مع اختلاف الوظيفة والاداء والغرض الاساسي لها . 
من هذه الامور هو استخدام Dataset [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=127&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>مع كثر هذه التقنيات ، يقل العبئ البرمجي والذهني على البرمج ، لكن الضريبة هي تعلم تقنية جديدة كل يوم ومعرفة اي تقنية يجب ان يستخدم في الحالة التي يواجهها ، خصوصا ان هناك تقنيات كثيرة تصب في نفس الجانب ولكن مع اختلاف الوظيفة والاداء والغرض الاساسي لها . </p>
<p>من هذه الامور هو استخدام Dataset او LINQtoSQL ، فبعد ظهور LINQtoSQL صار علينا التفريق في استخدامهما ومعرفة الحالات التي تقتضي افضلية ايهما ! </p>
<p>في الحقيقة هذا يعتمد على السيناريوهات التي تود تحقيقها ، وانت حر بطبيعة الحال في السيناريو الذي تريد . </p>
<p>بالنسبة للـ Dataset :   <br />- الـ Dataset سهل التعريف ، والتسلسل Serialize ، ويسهل فصل الكود فيها عن تصميمه في المشاريع المتعددة الطبقات خصوصا بما يتعلق بالـ TableAdapter المضمنه فيه .    <br />- الـ Dataset يحتوي على متتبع للتغيرات التي تطرأ على البيانات المضمنه فيه، ويدعم التغيير دفعه واحده Batch Editing وكذا بالنسبة للتصفيه والعرض ، كما انه يتعامل بشكل تلقائي مع العلاقات المركبة Complex Relationships .    <br />- يسهل استخدام Dataset عندما نرغب في عمل ربط بيانات DataBinding بشكل متقدم ومعقد .    <br />- يصعب استخدام Dataset عندما نرغب بعمل بعمل عمليات تحقق متقدمة على البيانات .    <br />- يجب تجنب استخدام Dataset عندما تقوم ببناء تطبيق موزع ليس كل العملاء Clients فيه مبنية على net. </p>
<p>بالنسبة لـ LINQtoSQL : </p>
<p>-&#160; يقدم لك LINQtoSQL دعم تحكم كامل بالتحقق Validation, السلوك Behavior ، منطق الأعمال BusinessLogic ، كما انها سهله التوريث للفئات الاخرى ، هذا يعني امكانيه عمل طبقات ام وطبقات مشتقة للاعمال بكل سهولة .   <br />- يمكن عمل تسلسل Serialization لفئات LINQtoSQL على شكل مصفوفات Arrays لغير عملاء net.     <br />- بمجرد ايقاف الاتصال بين LINQtoSQL والـ DataContext ، تكون عملية ال Databinding وتعقب التغييرات على البيانات عملية صعبة ويجب عليك القيام بكل ذلك بنفسك !</p>
Posted in برمجة قواعد البيانات ADO.NET, تقنية net. Tagged: dataset, linqtosql, ntier <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=127&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>استخدام Parameters في ADO.NET لتبادل البيانات مع قاعدة البيانات &#8211; الجزء الثاني</title>
		<link>http://alnabhani.wordpress.com/2008/09/26/%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-parameters-%d9%81%d9%8a-adonet-%d9%84%d8%aa%d8%a8%d8%a7%d8%af%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d9%85%d8%b9-%d9%82%d8%a7%d8%b9%d8%af-2/</link>
		<comments>http://alnabhani.wordpress.com/2008/09/26/%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-parameters-%d9%81%d9%8a-adonet-%d9%84%d8%aa%d8%a8%d8%a7%d8%af%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d9%85%d8%b9-%d9%82%d8%a7%d8%b9%d8%af-2/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 12:44:00 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[parameters]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2008/09/26/%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-parameters-%d9%81%d9%8a-adonet-%d9%84%d8%aa%d8%a8%d8%a7%d8%af%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d9%85%d8%b9-%d9%82%d8%a7%d8%b9%d8%af-2/</guid>
		<description><![CDATA[في الجزء الاول من هذا الدرس تكلمنا حول اهميه الباراميترات وفوائدها ، اما الآن فنأتي الى كيفية استخدامها .     في هذا الدرس لن اطول كثيرا في الحديث ، فقط نذكر كيفيه استخدام الباراميترات ونذكر بعض الاكواد والامور المتعلقه بها . 

 
الكود التالي يقوم بتمرير باراميتر يحمل الاسم ProductName@ الى الاستعلام [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=106&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><b>في الجزء الاول من هذا الدرس تكلمنا حول اهميه الباراميترات وفوائدها ، اما الآن فنأتي الى كيفية استخدامها .</b>     <br /><b>في هذا الدرس لن اطول كثيرا في الحديث ، فقط نذكر كيفيه استخدام الباراميترات ونذكر بعض الاكواد والامور المتعلقه بها .</b> </p>
</p>
<p> <span id="more-106"></span>
<p><b>الكود التالي يقوم بتمرير باراميتر يحمل الاسم ProductName@ الى الاستعلام الموجود في الكائن cmd :</b></p>
</p>
<table cellspacing="0" cellpadding="2" width="512" border="1">
<tbody>
<tr>
<td dir="ltr" valign="top" width="510">
<div class="code"><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">sql</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">String</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080"> &quot;SELECT ProductID, ProductName FROM Products WHERE ProductName = @ProductName &quot;              <br /></font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">cmd</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#2b91af">SqlCommand</font><font color="#000000">(sql,</font><font color="#808080">&#160;</font><font color="#000000">conn)</font><font color="#808080">&#160;</font><font color="#006400">&#8216;orDim cmd as New OleDbCommand(sql, conn)              <br /></font><font color="#000000">cmd.Parameters.AddWithValue(</font><font color="#808080">&quot;@ProductName&quot;</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#000000">TextBox1.Text)</font> </div>
<p>&#160;&#160; </td>
</tr>
</tbody>
</table>
<p>اذا جربت ادخال اي من القيم التاليه في TextBox1 فسيعمل الكود بلا مشاكل ولن تحدث اي اخطاء بمشيئه الله :</p>
</p>
<table cellspacing="0" cellpadding="2" width="514" border="1">
<tbody>
<tr>
<td valign="top" width="512">
<div class="code" dir="ltr">chef            <br />Chef Anton&#8217;s             <br />x&#8217; INSERT Employees (FirstName,LastName) VALUES(&#8216;get here?&#8217;,'How did this&#8217;) &#8212; </div>
</td>
</tr>
</tbody>
</table>
<p>الآن سنشرح الكود حبه حبه :    <br /><b>1- في السطر الأول تم انشاء متغير نصي جديد واسندنا له جمله الاستعلام المطلوبة واهم ما فعلناه هو اننا وضعنا بدلا من قيمه الحقل ProductName القيمه ProductName@ والتي تمثل اسم الباراميتر الذي سنمرره للكائن Parameter .</b>     <br /><b>2- في السطر الثاني انشأنا كائن جديد من النوع SQLCommand ولك حريه نوعه على حسب قاعدة البيانات فيمكن ان يكون OleCommand او OracleCommand على حسب نوع قاعدة البيانات .</b>     <br /><b>3- في السطر الثالث قمنا بإضافه باراميتر جديد الى مصفوفة الباراميترات التي تتبع الكائن cmd ، وهنا استخدمنا طريقة مباشره لتعريف الباراميترات وهي اننا اضفناه عن طريق الطريقة AddWithValue ومررنا له القيم المطلوبه .</b>     <br /><b>المهم في السطر الثالث هنا هوه اننا وضعنا اسم الباراميتر المراد ارسال قيمته وهي ProductName@ ووضعنا القيمه الخاصه به وهي النص الموجود في الخاصيه Text التابعه للكائن textBox1 .</b>     <br /><b>الباراميترات داخل جمل الاستعلام SQL :</b>     <br /><b>وبالنسبه لتسميه المتغيرات في جمل الاستعلام SQL يمكنك ان تضع اي اسم تشاء ، ابعد عن الاسماء العربية ، لا تستخدم الارقام ، ولا تضع الاسم بين حاصرتين ولا مسافات . ويفضل لو يبدأ بالرمز @ لتسهل على نفسك قراءه الكود لاحقا ولتعرف مباشره ان تلك الكلمه هي اسم لباراميتر بمجرد وجود @ </b>    <br /><b>تسميه الباراميتر تتيح لنا تمرير واستلام قيم اكثر من باراميتر واحد ، فيمكنك انشاء عدد من الباراميترات وكل منها له اسم معين وعند اضافتها الى المصفوفة Parameters ستقوم بارسال كل قيمه مع اسم الباراميتر فتتجنب اي مشكله بخصوص الباراميترات ، </b>    <br /><b>بعض المبرمجين قد يضع العلامة ? بدلا من قيمه كل حقل ويستخدمها مع كل الحقول ، وبالتالي سيكون لكل الباراميترات الاسم نفسه ، في هذه الحاله يجب ان تضيف كل باراميتر وقيمته الى مصفوفة الباراميترات Parameters التابعه للكائن cmd بالترتيب، مع ذلك ، انا لا احبذ هذه الطريقة مطلقا .</b>     <br /><b>الكائن Parameter :</b>     <br /><b>حتى يكتمل حديثنا عن البارميترات ، احببت ان تكلم عن الكائن Parameter .</b>     <br /><b>يمكننا انشاء باراميتر جديد بالصيغه التالية :</b></p>
</p>
<table cellspacing="0" cellpadding="2" width="510" border="1">
<tbody>
<tr>
<td dir="ltr" valign="top" width="508">
<div class="code"><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">ProductNameParameter</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">SqlClient.SqlParameter</font><font color="#808080">              <br /></font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">ProductNameParameter</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">New</font><font color="#808080">&#160;</font><font color="#000000">OleDb.OleDbParameter</font><font color="#808080">              <br /></font></div>
</td>
</tr>
</tbody>
</table>
<p><b>طبعا الكود السابق هو مثال لكيفية انشاء باراميتر جديد خاص بـ SQL او باكسس . الغرض منه ان تعرف ان الكائن Parameter يتبع احد انواع مزودات قواعد البيانات في ADO.NET .</b></p>
<p><b>في الكود التالي قمنا بتعريف باراميتر بالإسم ProductNameParameter واسناد قيمه ونوع له : </b></p>
</p>
<table cellspacing="0" cellpadding="2" width="515" border="1">
<tbody>
<tr>
<td dir="ltr" valign="top" width="513">
<div class="code"><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">cmd</font><font color="#808080">&#160;</font><font color="#000000">AsNew</font><font color="#808080">&#160;</font><font color="#000000">Data.SqlClient.</font><font color="#2b91af">SqlCommand</font><font color="#000000">(sql,</font><font color="#808080">&#160;</font><font color="#000000">conn)</font><font color="#808080">&#160;</font><font color="#006400">&#8216;orDim cmd as New OleDbCommand(sql, conn)              <br /></font><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">ProductNameParameter</font><font color="#808080">&#160;</font><font color="#000000">AsNew</font><font color="#808080">&#160;</font><font color="#000000">Data.SqlClient.SqlParameter</font><font color="#808080">              <br /></font><font color="#0000ff">With</font><font color="#808080">&#160;</font><font color="#000000">ProductNameParameter</font><font color="#808080">              <br /></font><font color="#000000">.ParameterName</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080"> &quot;@ProductName&quot;              <br /></font><font color="#000000">.Value</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">Textbox1.Text</font><font color="#808080">              <br /></font><font color="#000000">.SqlDbType</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#000000">SqlDbType.NText</font><font color="#808080">              <br /></font><font color="#000000">EndWith</font><font color="#808080">              <br /></font><font color="#000000">cmd.Parameters.Add(ProductNameParameter)</font> </div>
</td>
</tr>
</tbody>
</table>
</p>
<p>&#160;</p>
<p><b>فكما رأينا هذه احدى الطرق الكثير لانشاء باراميتر وتمرير قيمته الى الاستعلام بصيغه جمل SQL . ومن الكود السابق تبرز الخصائص الثلاث التالية : </b></p>
<ul>
<li>ParameterName : وهي خاصيه من النوع String ويجب ان تسند لها اسم الباراميتر الذي وضعته في جمله الاستعلام . </li>
<li><b>SqlDBType : وهي خاصيه تقوم بتحديد نوع قيمه البارميتر من خلالها ، وهي تختلف باختلاف نوع مزود قاعدة البيانات للباراميتر ، فلو كانت SQL كحالتنا هذه ستكون SQLDBType ولو كانت تتبع OleDB ستكون OleDBType وهكذا .</b> </li>
<li><b>Value : وهذه الخاصيه تمثل قيمه الباراميتر .</b> </li>
</ul>
<p> <b><b>لمن يريد التوسع حول الانواع الممكنه للباراميترات والتي نسندها للخاصيه Type يمكن زياره <a href="http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbtype(VS.71).aspx">الرابط التالي </a>في حاله OleDB او <a href="http://msdn2.microsoft.com/en-us/library/system.data.dbtype(VS.71).aspx">الرابط التالي</a> في حاله SQL .</b></b>
<p><b>طبعا من الممكن لأي مبرمج ان يختصر الكود السابق كثيرا باستخدام احد المشيدات Construcotrs الخاصه بالكائن Parameter عند انشاء نسخه جديده منه بالذاكره ، لكن ما لا اعرف سببه حتى الان هو عدم وجود مشيد يستقبل قيم الخصائص الثلاث السابقه معا ! ولكن بالطريقة التالية يمكنك فعلها :</b></p>
<table cellspacing="0" cellpadding="2" width="500" border="1">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#000000">Command.Parameters.Add(</font><font color="#808080">&quot;@SerialNum&quot;</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#000000">OleDbType.</font><font color="#0000ff">Integer</font><font color="#000000">).Value</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080">&#160;</font><font color="#800000">239</font> </div>
</td>
</tr>
</tbody>
</table>
<p><b>كود أخير اضيفه في هذا الجزء لمن يرغب بإرشاد لمعرفه كيفيه انشاء اكثر من باراميتر واحد والتعامل معها :</b></p>
</p>
<table cellspacing="0" cellpadding="2" width="511" border="1">
<tbody>
<tr>
<td dir="ltr" valign="top" width="509">
<div class="code"><font color="#0000ff">Dim</font><font color="#808080">&#160;</font><font color="#000000">sql</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">String</font><font color="#808080">&#160;</font><font color="#0000ff">=</font><font color="#808080"> &quot;SELECT FirstName,LastName FROM Employees&quot; </font><font color="#000000">&amp;</font><font color="#808080">&#160;</font><font color="#000000">_</font><font color="#808080">              <br />&quot; WHERE HireDate BETWEEN @StartDate AND @EndDate&quot; </font></div>
</td>
</tr>
</tbody>
</table>
Posted in برمجة قواعد البيانات ADO.NET Tagged: ado.net, parameters <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=106&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2008/09/26/%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-parameters-%d9%81%d9%8a-adonet-%d9%84%d8%aa%d8%a8%d8%a7%d8%af%d9%84-%d8%a7%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d9%85%d8%b9-%d9%82%d8%a7%d8%b9%d8%af-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>سلسلة فيديو LINQ مع الاكواد من مايكروسوفت</title>
		<link>http://alnabhani.wordpress.com/2008/07/04/linq-video-codes-msdn/</link>
		<comments>http://alnabhani.wordpress.com/2008/07/04/linq-video-codes-msdn/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 15:33:44 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[sample codes]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/?p=26</guid>
		<description><![CDATA[اذا كنت قد سمعت بهذه التقنية ام لم تسمع بها بعد ، وحتى ان كنت من النوع الذي قد وضع &#8221; رجل على رجل &#8221; كما يقولون او بطيخه صيفي في بطنه وهضمتها واستخدمتها فعليا ، فهذا لا يعني انك تعرف كل شيء عن هذه التقنية !!- انا هنا لست بصدد الحديث عن هذه التقنية [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=26&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>اذا كنت قد سمعت بهذه التقنية ام لم تسمع بها بعد ، وحتى ان كنت من النوع الذي قد وضع &#8221; رجل على رجل &#8221; كما يقولون او بطيخه صيفي في بطنه وهضمتها واستخدمتها فعليا ، فهذا لا يعني انك تعرف كل شيء عن هذه التقنية !!- انا هنا لست بصدد الحديث عن هذه التقنية وعن كيفية استخدامها ومزاياها وغيرها من الامور- ولكنني بصدد إحالتك الى المدعوة Beth Massi من مايكروسوفت والتي ستقدم لك دروس فيديو مجانية ! لشرح هذه التقنية مع امثلة تطبيقية في الفيديو و sample codes .</p>
<p>للوصول الى الـ videos ، انقر <a href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx?wt.slv=topsectionsee" target="_blank">هنا </a>، لتحميل الـ Sample Codes انقر <a href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=vbvideoslinq&amp;ReleaseId=14" target="_blank">هنا</a></p>
<p>نلتقي لاحقا</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/alnabhani.wordpress.com/26/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/alnabhani.wordpress.com/26/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/26/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/26/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/26/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=26&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2008/07/04/linq-video-codes-msdn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>مقدمة إلى تقنية LINQ مع أمثله مقابله لجمل SQL مختلفة</title>
		<link>http://alnabhani.wordpress.com/2007/08/23/%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%a5%d9%84%d9%89-%d8%aa%d9%82%d9%86%d9%8a%d8%a9-linq-%d9%85%d8%b9-%d8%a3%d9%85%d8%ab%d9%84%d9%87-%d9%85%d9%82%d8%a7%d8%a8%d9%84%d9%87-%d9%84%d8%ac%d9%85%d9%84-sql/</link>
		<comments>http://alnabhani.wordpress.com/2007/08/23/%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%a5%d9%84%d9%89-%d8%aa%d9%82%d9%86%d9%8a%d8%a9-linq-%d9%85%d8%b9-%d8%a3%d9%85%d8%ab%d9%84%d9%87-%d9%85%d9%82%d8%a7%d8%a8%d9%84%d9%87-%d9%84%d8%ac%d9%85%d9%84-sql/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 17:31:05 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2007/08/23/%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%a5%d9%84%d9%89-%d8%aa%d9%82%d9%86%d9%8a%d8%a9-linq-%d9%85%d8%b9-%d8%a3%d9%85%d8%ab%d9%84%d9%87-%d9%85%d9%82%d8%a7%d8%a8%d9%84%d9%87-%d9%84%d8%ac%d9%85%d9%84-sql/</guid>
		<description><![CDATA[اقدم لكم هذا الموضوع الذي قد يجده البعض سابقا لأوانه ، وهو يتحدث عن تقنية LINQ التي يحملها اوركاس الينا ( الاصدار 2008 من Visual Studio ) ولكن في الحقيقة انه استغلال للوقت وتعلم لشيء جديد سيجعلنا قادرين على العمل معه فور صدور الاصدار النهائي من Visual Studio 2008 والملقب بـ Orcas .هذا المقال مقال [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=5&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong><font face="Arial">اقدم لكم هذا الموضوع الذي قد يجده البعض سابقا لأوانه ، وهو يتحدث عن تقنية LINQ التي يحملها اوركاس الينا ( الاصدار 2008 من Visual Studio ) ولكن في الحقيقة انه استغلال للوقت وتعلم لشيء جديد سيجعلنا قادرين على العمل معه فور صدور الاصدار النهائي من Visual Studio 2008 والملقب بـ Orcas .</font></strong><strong><font face="Arial"><font size="3">هذا المقال مقال مترجم <a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx"><font color="#22229c">وهذا </font></a>مصدره للأمانه ، ولا تنسوا ان الترجمه هي مصدر رئيسي للمعلومات ادت الى تفوق امتنا الاسلامية العربية في قديم الزمان وهي الوسيلة التي جعلت الغرب اليوم يعيش في هذه الثورة العلمية العظيمة التي يشهدها العالم اليوم .</font></font></strong><strong><font face="Arial"><strong><font face="Arial"><font size="3"><font color="#0000ff">اولا : ما هي تقنية LINQ ؟</font></font></font></strong><br />
<font face="Arial"><font size="3"><strong>لقد تحدثت في هذا الموضوع :</strong><a target="_blank" href="http://www.hiarab.org/showthread.php?t=14240"><strong><font color="#22229c">تعرف على Microsoft Visual Studio 2008 Code Name Orcas</font></strong></a><strong> عن هذه</strong></font></font><font face="Arial"><font size="3"><strong> التقنية بشكل مختصر وهناك تجد جواب هذا السؤال فلا داعي للتكرار </strong></font></font></p>
<p></font></strong><strong><font face="Arial"><font size="3"><font color="#0000ff">ثانيا : ما هي LINQ to SQL ؟</font></font></font></strong><br />
<strong><font face="Arial"><font size="3">هي عباره عن اداه تتوفر في أوركاس ، تقوم هذه الأداة بعرض قاعدة البيانات التي تتصل بها على هيئة فئات net. مما يساعدك على استخدام تقنية LINQ وما تتضمنه من امكانيات مختلفه كعرض البيانات وتعديلها وحذف البيانات واضافه بيانات جديده وغيرها من الاوامر التي تمكننا لغه SQL سابقا من القيام بها . ويجب ان نعلم ايضا ان هذه الاداة لا تغفل مكونات قاعدة البيانات الاخرى كالـ Views, Transictions and Stored Procedures .</font></font></strong></p>
<p dir="rtl"><span id="more-5"></span></p>
<p><strong><font face="Arial"><font size="3">وتوضح هذه الصورة أداة LINQ to SQL التي ترجمت قاعدة بيانات Northwind الشهيره :</font></font></strong><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step1.jpg" /></p>
<p><font face="Arial"><font size="3"><strong>ويوضح<a target="_blank" href="http://www.scottgu.com/blogposts/video/linqtalk1.zip"><font color="#22229c"> هذا الفيديو </font></a>كيفية استخدام هذا المحرر كتابه بعض الاكواد بهذه التقنية . للمزيد من المعلومات حول هذا الفيديو الرجاء النقر <a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/01/28/video-using-linq-with-asp-net-in-vs-orcas-part-1.aspx"><font color="#22229c">هنا </font></a>. وخذها نصيحه مني ، لا تفوت الفلم السابق وحاول قدر الامكان ان تشاهده قبل ان تكمل هذه المقاله لانه بالفعل يوضح لك الاستخدام العملي لهذه التقنية بلغه #C ( وطبعا مع VB.NET سيكون مثله ) وسيكشف لك الكثير من الغموض !</strong></font></font></p>
<p><strong><font face="Arial"><font size="3">ونلاحظ من هذه الصوره كيف ان قاعدة البيانات تظهر جداولها كفئات net. وهنا السر في كيفية الاستخدام المباشر للجداول والكائنات الاخرى لقاعدة البيانات في اكوادك </font></font></strong><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step2.jpg" /></p>
<p><font face="Arial"><font size="3"><strong>والآن حان وقت الجد الحقيقي ، وقت التعامل مع الاكواد : </strong></font></font></p>
<p><strong><font face="Arial"><font size="3"><font color="#0000ff">التعامل مع تقني LINQ بالكود ( أمثله ) :</font></font></font></strong><br />
<strong><font face="Arial"><font size="3"><font color="#006400">1- الاستعلام عن قيمه معينه بإستخدام LINQ :</font></font></font></strong><br />
<strong><font face="Arial"><font size="3"><font color="#000000">لاحظ الكود التالي ( مرفق بصيغه VB.NET و #C ) :</font></font></font></strong><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step3.jpg" /><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step9.jpg" /><br />
<strong><font face="Arial"><font size="3">من خلال محاوله قراءه الكود السابق نجد انه يقابل شيئا مثل الجمله التالية في SQL :</font></font></strong></p>
<p style="margin-bottom:2px;" class="smallfont">كود:</p>
<pre style="overflow:auto;width:640px;height:50px;text-align:left;border:1px inset;margin:0;padding:6px;">SELECT P FROM Products  WHERE Category.CategoryName = "Beverages"</pre>
<p><strong><font face="Arial"><font size="3">لكننا نلاحظ انه من احد الفوائد الرئيسية هنا اننا حصلنا على كائن يسمى Products يحتوي على ناتج الجمله السابقة بشكل مباشر !</font></font></strong></p>
<p><strong><font face="Arial"><font size="3"><font color="#006400">2- تحديث Product في قاعدة البيانات :</font></font></font></strong><br />
<strong><font face="Arial"><font size="3"><font color="#000000">الكود التالي يمثل مقابل لجمله استعلام لتحديث الجدول Products في السجل الذي تكون فيه قيمه الحقل ProductName تساوي Toy 1 :</font></font></font></strong><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step5.jpg" /><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step11.jpg" /></p>
<p><font face="Arial"><font size="3"><strong>لاحظ كيف ان عمليه الجفظ والتعديل اصبحت سهله ؟ أليس ما تريده انت كمبرمج هو الحصول على طرق اسهل للعمل وتقليل حجم الكود لتنفيذ عمليه معينه مع الاحتفاظ بتحكم جيد بل ممتاز بالعمل ؟ هذا ما تقدمه تقنية LINQ للمبرمجين في مجال قواعد البيانات !</strong></font></font></p>
<p><strong><font face="Arial"><font size="3">أطلب من أحدكم ان يثبت لي انه قرأ هذا السطر ويكتب بنفسه الكود كاملا في Visual Studio 2005 و net framework 2.0 وما قبلهما بإستخدام كائن SQLCommand او OleCommand </font></font></strong></p>
<p><strong><font face="Arial"><font size="3"><font color="#006400">3- إضافة Category جديده الى قاعدة البيانات مع 2 Products :</font></font></font></strong><br />
<strong><font face="Arial"><font size="3"><font color="#006400"><font face="Arial"><font size="3"><strong><img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step4.jpg" /></strong></font></font></font></font></font></strong><font face="Arial"><font size="3"><br />
<strong><font color="#006400"><img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step12.jpg" /> </font></strong><br />
</font></font><strong><font face="Arial"><font size="3"><font color="#000000">وهذه هي كل الحكاية <img border="0" src="http://null/images/smilies/board/Board%20(33).gif" class="inlineimg" />يا سلام على هذه التقنية الآن اقول متى سيصدر اوركاس حتى ننتهي من ما نحن عليه الآن ! </font></font></font></strong></p>
<p><strong><font face="Arial"><font size="3"><font color="#006400">4- حذف Product من قاعدة البيانات :</font></font></font></strong><br />
<strong><font face="Arial"><font size="3">وهذا مثال بالكود لحذف جميع السجلات التي تحتوي على &#8220;Toy&#8221; في الحقل CategoryName :</font></font></strong><br />
<font face="Arial"><font size="3"><strong><img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step6.jpg" /></strong></font></font><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step13.jpg" /></p>
<p><strong><font face="Arial"><font size="3">يا سلام على السهوله الشديده <img border="0" src="http://null/images/smilies/board/Board%20(41).gif" class="inlineimg" /></font></font></strong></p>
<p><strong><font face="Arial"><font size="3"><font color="#006400">5- استدعاء اجراء مخزن Stored Procedure من قاعدة البيانات :</font></font></font></strong><br />
<strong><font face="Arial"><font size="3">يا سلام على الاجراءات المخزنة واستخدامها ، يا سلام على سرعتها وعلى تسهيلها للعمل ومن يعمل على تطبيق كبير يعرف معنى كلامي واقدم له هذه الهدية :</font></font></strong><br />
<font face="Arial"><font size="3"><strong><img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step7.jpg" /></strong></font></font><br />
<img border="0" src="http://www.scottgu.com/blogposts/linqtosql/step14.jpg" /></p>
<p><font face="Arial"><font size="3"><strong>الكود السابق بكلا الصيغتين استدعى اجراءا مخزنا في قاعدة البيانات اسمه </strong><font size="2">GetProductsByCategory </font><strong>والذي اصبح استدعاؤه اسهل من اي وقت مضى !</strong></font></font></p>
<p><strong><font face="Arial"><font size="3">وقبل أن اختم هذا المقال ، اود ان اخبركم بخبر ، وهو ان هذه المقاله ليست كامله ولكنني وضعت الجزء الذي يخص الكود فقط ، فهناك جزء آخر من هذه المقاله يتحدث حول الاداه LINQ to SQL وكيفية وضع الجداول والحقول المطلوبة عليها وامور اخرى مهمه يمكنكم الوصول اليها بالنقر على <a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx"><font color="#22229c">هذا الرابط </font></a></font></font></strong></p>
<p><strong><font face="Arial"><font size="3">وكالعاده اجدد النداء ، يا من تصرون على Visual studio 2002 و 2003 في عهد 2005 الفرق بينهم كبير جدا فلماذا كل هذا الاصرار على البقاء في الوراء في هذه التنقيات ؟ </font></font></strong></p>
<p><strong><font face="Arial"><font size="3">يامن تصرون على البقاء على Visual Basic 6 وتعيدون وتزيدون فيه مئات المرات ، الا تدركون انكم بذلك تحافظون على <u><font color="#ff0000">جهلكم</font></u> &#8211; واسمحولي على الكلمه الاخيره ولكن الحق يقال .</font></font></strong></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/alnabhani.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/alnabhani.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=5&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2007/08/23/%d9%85%d9%82%d8%af%d9%85%d8%a9-%d8%a5%d9%84%d9%89-%d8%aa%d9%82%d9%86%d9%8a%d8%a9-linq-%d9%85%d8%b9-%d8%a3%d9%85%d8%ab%d9%84%d9%87-%d9%85%d9%82%d8%a7%d8%a8%d9%84%d9%87-%d9%84%d8%ac%d9%85%d9%84-sql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step1.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step2.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step3.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step9.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step5.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step11.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step4.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step12.jpg" medium="image" />

		<media:content url="http://null/images/smilies/board/Board%20(33).gif" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step6.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step13.jpg" medium="image" />

		<media:content url="http://null/images/smilies/board/Board%20(41).gif" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step7.jpg" medium="image" />

		<media:content url="http://www.scottgu.com/blogposts/linqtosql/step14.jpg" medium="image" />
	</item>
	</channel>
</rss>