تبليغاتX
UNiComp.iR | Download Direct Tutorials Video , Film | دانلودمستقیم فیلم آموزشی،کتاب،جزوه،مقاله
دانلودمستقیم فیلم آموزشی،کتاب،جزوه،مقاله
دانلود مستقیم فیلم آموزشی ، کتاب ، جزوه ، مقاله ، هک

اولين سايت فارسي ارائه دهنده فيلم هاي آموزشي با لينك مستقيم دانلود

Visual Basic developers will learn how to query their SQL Server database in order to easily create Excel spreadsheets directly in the Visual Basic editor using LINQ to XML.

Presented by Beth Massi

Duration: 10 minutes, 53 seconds



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه هجدهم مهر 1388 توسط سعيد

Visual Basic developers will learn how to query their SQL Server database in order to easily create XML and HTML documents directly in the Visual Basic editor.

Presented by Beth Massi

Duration: 15 minutes, 58 seconds



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه هجدهم مهر 1388 توسط سعيد

Visual Basic developers will learn how to enable XML IntelliSense using schemas and how XML namespaces are used when querying and creating XML documents.

Presented by Beth Massi

Duration: 13 minutes, 16 seconds



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه هجدهم مهر 1388 توسط سعيد

Visual Basic developers will learn how to work with XML in Visual Basic using XML literals, embedded expressions and XML axis properties to create, query and transform XML documents easily.

Presented by Beth Massi

Duration: 14 minutes, 10 seconds



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه هجدهم مهر 1388 توسط سعيد

Visual Basic programmers will learn about the new multi-targeting feature and how to upgrade projects written in Visual Basic 2005 to Visual Basic 2008 Beta 2 in order to enable different LINQ providers.

Presented by Beth Massi

Duration: 8 minutes, 28 seconds



ادامه مطلب...
Subscribe
ارسال در تاريخ سه شنبه چهاردهم مهر 1388 توسط سعيد

Perform Group and Aggregate Queries?

Visual Basic programmers will learn how to perform group and aggregate queries over business object collections and how to display them in related grids.

Presented by Beth Massi

Duration: 17 minutes, 22 seconds

 



ادامه مطلب...
Subscribe
ارسال در تاريخ سه شنبه چهاردهم مهر 1388 توسط سعيد

Visual Basic programmers will learn how to write simple LINQ queries over objects by navigating files on the file system.

Presented by Beth Massi

Duration: 9 minutes, 14 seconds



ادامه مطلب...
Subscribe
ارسال در تاريخ سه شنبه چهاردهم مهر 1388 توسط سعيد

LinQ To XML



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه یازدهم مهر 1388 توسط سعيد

O'Reilly Webcast: Writing LINQ Queries with LINQPad

خود نرم افزار رو هم مي تونيد از سايت دانلود كنيد



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه یازدهم مهر 1388 توسط سعيد

 Data Objects Using C# 3 0 and LINQ



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه یازدهم مهر 1388 توسط سعيد
برنامه معروف LINQPad تا كنون به همراه مثال‌هاي كتاب C# 3.0 in a Nutshell به صورت يكپارچه ارائه مي‌شد.
اكنون مثال‌هاي كتاب LINQ in Action نيز قابليت يكپارچگي با اين برنامه را يافته‌اند. به اين صورت بسيار ساده و در همان محيط LINQPad مي‌توان اين مثال‌ها را مرور و اجرا كرد كه در يادگيري LINQ كمك شاياني مي‌نمايند.
براي نصب اين مثال‌هاي يكپارچه جديد، بر روي لينك Download more samples آن كليك كرده و در صفحه‌ي باز شده، بر روي لينكي به نام Download full code listings into LINQPad كليك كنيد.



ادامه مطلب...
Subscribe
ارسال در تاريخ دوشنبه هجدهم خرداد 1388 توسط سعيد
مقدمه ای بر تکنولوژی Windows Presentation Foundation

تکنولوژي هاي جديد دات نت

از زمان ظهور دات نت، با اولين نسخه آن يعني دات نت فريم ورک 1.0 که همراه با ويژوال استوديو 2002 همراه بود، تا به امروز که شاهد نسخه 3.5 از اين تکنولوژي مي باشيم، تغييرت بسياري در آن به وجود آمده است. افزوده شدن کلاس هاي جديد در غالب فايل هاي DLL اي که ما آن ها را دات نت اسمبلي مي ناميم، همچنين اضافه شدن تکنولوژي هاي جديد به اين مجموعه باعث گسترش کاربرد اين مجموعه شده است.

همزمان با ظهور نسخه 3.0 دات نت فريم ورک، تکنولوژي هاي جديدي نيز به وجود آمد. اين تکنولوژي ها، که بر خلاف تصور سطحي و ابتدايي بسياري از برنامه نويسان در ابتداي ظهور آن ها، صرفا اضافه شدن تعدادي دات نت اسمبلي به دات نت اسمبلي هاي قبلي، تلقي مي شد، تغييرات بسياري را در امر برنامه نويسي دات نت به وجود آورد. تکنولوژي WPF به همراه تکنولوژي هاي WCF و WWF با نسخه 3.0 دات نت فريم ورک توسط شرکت ماکروسافت معرفي شدند.

در ادامه توضيح مختصري راجع به WCF و WWF خواهيم ديد و سپس به بحث اصلي، يعني WPF خواهيم پرداخت.

Windows Communication Foundation



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و هفتم اردیبهشت 1388 توسط سعيد
یک بستر Object-Relational Mapping ایجاد می کند که اجازه می دهد یک mapping یک به یک بین MS SQL و کلاس های دات نت ایجاد شود . به طور خلاصه LINQ to SQL برای نرم افزارهایی که به روش Rapid Development پیاده سازی می شوند و احتیاج به کار و استفاده از بانک اطلاعاتی دارند بسیار مفید و باعث تسهیل در کار با بانک اطلاعاتی می شود . در این مدل امکان پرس و جو از بانک اطلاعاتی ، افزودن ، حذف و ویرایش اطلاعات به راحتی فراهم است . عملیات کار با بانک اطلاعاتی بوسیله ترجمه پرس و جوهای language integrated به sql برای اجرا در بانک اطلاعاتی و سپس ترجمه خروجی SQL به آبجکت های داخل زبان برنامه نویسی انجام می شود .

 



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و هفتم اردیبهشت 1388 توسط سعيد
 LINQ یا Language Integrated Query (که همانند Link خوانده می شود ) کامپوننتی است که از نسخه 3.5 دات نت به شکل پیش فرض نصب می شود و امکان انجام پرس و جو به سبک SQL را روی انواع مدلهای داده ها فراهم می کند .


LINQ عملگرهایی را تعریف می کند که انجام اعمال فیلترکردن ، پرس و جو و پروجکشن را روی آرایه ها ، کلاسها ، XML ، بانک اطلاعاتی رابطه ای و دیگر انواع اطلاعات که قابل تعریف است را آسان می کند .


عملگرهایی که بیشترین استفاده را در LINQ دارند عبارتند از :


From و In : برای واکشی مجموعه ای از اطلاعات از یک مجموعه بزرگتر به کار می رود . این عملگر به عنوان یکی از عملگرهای اصلی در LINQ استفاده می شود .
WHERE : برای اعمال محدودیت روی مجموعه ای است که از مجموعه اصلی بدست می آید .
Select : برای انتخاب یک دنباله از مجموعه اصلی استفاده می شود .
Order by : برای مرتب سازی مجموعه جواب بکار می رود .
Group By: برای ساخت زیر مجموعه ای که بر مبنای یک مقدار آن گروه بندی شده باشد استفاده می شود .



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و هفتم اردیبهشت 1388 توسط سعيد
این هم یه مقاله دیگه برای آموزش LINQ كه مي تونيد مستقيم دانلود كنيد....

لينك مستقيم دانلود

pass : unicomp

Subscribe
ارسال در تاريخ سه شنبه بیست و دوم اردیبهشت 1388 توسط سعيد
سلام يه سوال جالب : اینه که در JOIN دو تا Table وقتی در هر دو Table ستونی با نام یکسان وجود داشته باشد و اگر بخواهیم در نتیجه Select هر دو ستون از دو جدول را بخواهیم داشته باشیم بایستی یکی از ستون ها را تغییر نام دهیم با استفاده از AS در SQL اما در LINQ دیگر AS جواب نمیده ...

اما جوابش ...



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیستم اردیبهشت 1388 توسط سعيد
LINQ در حالت کلی برای 3 حالت قابل استفاده است :


LINQ to Object
LINQ to ADO.Net
LINQ to XML

آموزش linq


تاکنون مطالبی را در مورد LINQ و دلایل بوجود آمدن آن بیان شد که صرفا جنبه تئوری داشتند در ادامه مثالهایی را بررسی می کنیم تا شیرینی استفاده از آن را نیز بچشیم:کف:.

مثال1)



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم بهمن 1387 توسط سعيد

سلام دوستان امید واردم اولین مقاله در مورد لینک رو مطالعه نموده باشید، چون مقاله امروز رو  در ادامه اون می نویسم و به اطلاعات موجود در مقاله اول برای مقاله جدید احتیاج خواهیم داشت.

برای آغاز کار جدولی به نام Test با مشخصات زیر ایجاد می کنیم، می خواهیم فرایند های Add، Delete و Update اطلاعات توسط LINQ رو بررسی کنیم.

توجه نمایید که فیلد ID را که کلید جدول است را به صورت Identity Auto در آورید.



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد

سلام دوستان در این مقاله از سری مقالات آموزشی لینک می خواهم شما را با یکی از ابزار هایی که ماکروسافت در نسخه جدید ویژوال استودیو خودش قرار داده و نحوه استفاده از آن در برنامه نویسی لینک آشنا کنم

Dbml یا همون Data base model همون طور که از اسمش پیداست شمای از بانک شما را ایجاد خواهد نمود البته این شما در عالی ترین مرتبه از لحاظ حفظ اصول object oriented  ایجاد می شه که بعداً در linq از آن استفاده خواهد شد. برای ساخت یک dbml ماکروسافت ابزاری مانند Dataset Designer را در اختیار کاربران قرار داده است

برای آغاز کار یک وب سایت جدید در Visual Studio 2008 ایجاد می کنیم، من می خواهم اطلاعات جدول Product از پایگاه داده AdventureWorks را در یک GridView نمایش بدهم

با راست کلیک بر روی عنوان پروژه در Solution Explorer و انتخاب Add new item… از پنجره ای که باز می شود ، Linq to sql classes را انتخاب نمایید ، این فایل در پوشه App_Code قرار می گیرد که این مورد را خود Visual Studio انجام خواهد داد

با باز شدن Designer آن از Server Explorer یک connection به پایگاه داده مورد نظر یعنی AdventureWorks می سازیم.

حال کافیست که جدول مورد نظر را بر روی Designer بیندازیم

 

حال بعد از قرار دادن یک GridView بر روی فرم در رویداد Form_Load  کد زیر را می نویسیم



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد

سلام دوستان همراه امیدوارم سری مقالات من مورد توجه شما عزیران قرار گرفته باشه ، تمام سعی من اینه که آخرین مباحث و تکنولوژی ها روز را در به شما معرفی کنم. این مژده را هم می خواهم پیشا پیش بدم که ادامه کار با توجه به منابع جدید به دست آمده ،سعی میکنم موارد آموزشی را به تفکیک بسیار با کیفیت تر و با دیدگاه Knowledge Base (دانش محور) تری ارایه نمایم تا علاوه بر بررسی موارد فنی، رویکرد های دیگری مانند جایگاه این Knowledge ها در یک framework هم اطلاعات خوبی بدست بیاوریم.

در این مقاله می خواهم شما را با نحوه فراخوانی یک Stored procedure در Linq آشنا کنم. مطابق مقاله قبل برای آغاز کار با Linq با راست کلیک بر روی عنوان پروژه و انتخاب Add New Item یک linq to sql به پروژه می افزاییم.

هدف فراخوانی اطلاعات جدول HumanResources.Department توسط stored procedure، GetDepartments می باشد.

با مراجعه به مد Design فایل dbml جدول Department را از Data Source ای که در server explorer ایجاد می کنیم به روی Designer می اندازیم.

حال به همین ترتیب با مراجعه به بخش Stored Procedure ، dbo. GetDepartments را نیز بر روی فرم می اندازیم. Stored procedure ها در یک پنل دیگر در کنار schema ای جدول قرار می گیرند.

 

برای فراخوانی داده ها پس از قرار دادن یک GridView بر روی فرم کد زیر را در رویداد load فرم می نویسیم

   



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد

در این مقاله اولین قدم در سری آموزش زبان لینک را بر خواهیم داشت . یاد خواهیم گرفت که چگونه توسط این زبان داده های موجود در یک جدول را فراخوانی نموده و در یک لیست نمایش دهیم.

برای آغاز کار  در Visual Studio 2008 یک پروژه جدید ایجاد می کنیم و در روی فرم یک Button و ListBox   قرار می دهیم.

برای استفاده از Linq می بایست دو Namespace زیر را به پروژه اضافه نماییم.

using System.Data.Linq;

using System.Data.Linq.Mapping;

البته برای کار به System.Linq هم احتیاج است که این Namespace به طور پیش فرض در هنگام ایجاد پروژه تعریف شده است.

کد زیر را در پشت دکمه می نویسیم:

       private void button1_Click(object sender, EventArgs e)

        {

            DataContext context = new DataContext("Data Source=.;Initial Catalog=AdventureWorks;Integrated Security=sspi");

            Table contact = context.GetTable();

            listBox1.Items.Clear();

             var query = (from c in contact

                          where c.ContactID < 10

                          select c);

             foreach (var o in query)

             {

                 listBox1.Items.Add(o.LastName);

             }

        }



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد
نرم افزار یکی از ارکان مهم فناوری اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نيز همواره حائز اهمیت بوده است ، ولی در ساليان اخير به دليل گسترش اينترنت و ظهور نسل جديدی از برنامه های کامپيوتری موسوم به برنامه های وب ، نگاه به نرم افزار و انتظار از آن در جهت تامين طيف گسترده ای از خواسته ها تغيير و رشد چشمگيری يافته است . به همين دليل است که در دنيای نرم افزار هر روز تحولات مهمی اتفاق می افتد و فناوری های جديدی قدم در اين عرصه می گذارند .

ظهور فناوری LINQ ( برگرفته شده از Language-INtegrated Query ) تلاشی است در اين راستا که با هدف تحول در نحوه دستیابی به منابع داده ( صرفنظر از نوع منبع داده ) ، مطرح شده است .
پس از مطرح شدن هر گونه فناوری در عرصه نرم افزار ، طراحان و پياده کنندگان با سه پرسش اساسی مواجه می گردند : این فناوری چيست ؟ چه کار می کند ؟ و چرا ما به آن نیاز داريم ؟ در این مقاله و سایر مقالاتی که در ادامه بر روی سایت منتشر خواهد شد ، سعی خواهیم کرد به سه پرسش فوق در ارتباط با فناوری LINQ پاسخ دهيم .

مقدمه
کد و داده دو عنصر اساسی در نرم افزار می باشند که هر یک دارای جایگاه تعريف شده مختص به خود است . یکی از فعالیت های مهم در زمان پياده سازی نرم افزار ، نوشتن کد مورد نیاز جهت دستيابی به داده است . برای نوشتن کد ، پياده کنندگان می توانند از زبان های برنامه نویسی مختلفی استفاده کنند . انتخاب زبان برنامه نویسی به عوامل متعددی نظیر نوع رفتار برنامه ، پيش زمينه و دانش پياده کنندگان ، مهارت های تیم پياده کننده ، نوع سیستم عامل و سياست های سازمان بستگی دارد . صرفنظر از این که پياده کنندگان چه زبانی را برای نوشتن کد انتخاب می نمایند ، در زمان پياده سازی نرم افزار به دفعات مجبور خواهیم بود که با داده سرو کار داشته باشیم . داده می تواند بر روی ديسک ، جداولی در بانک اطلاعاتی و يا اسناد XML ذخيره شده باشد . در برخی موارد لازم است که با تمامی نوع های اشاره شده در یک برنامه سرو کار داشته باشیم . فراموش نکنيم که مديريت داده برای هر پروژه نرم افزاری یک باید است .
پياده کنندگان نرم افزار در زمان نوشتن کد و تولید امکانات مورد نياز در هر يک از لایه های متفاوت ( با توجه به نوع معماری نرم افزار ) ، همواره این پرسش را با خود مطرح می نمایند که محيط پياده سازی و یا فريمورک هائی نظیر دات نت چه امکاناتی را در اختيار آنها خصوصا" در زمان کار با داده قرار می دهند . به عبارت دیگر ، يک سيستم عامل چگونه می تواند نياز پياده کنندگان نرم افزار را پوشش دهد و چه امکانات و پتانسيل هائی را در اختيار علاقه مندان به طراحی و پياده سازی نرم افزار قرار می دهد .
دات نت به عنوان یکی از فريمورک های پياده سازی نرم افزار در سالیان اخير ، امکانات متعددی را جهت کار با داده در اختيار پياده کنندگان نرم افزار قرار می دهد . LINQ ، تلاشی است جهت يکپارچگی عميق تر و بیش تر بین زبان های برنامه نویسی و داده . در واقع LINQ مشتمل بر مجموعه ای از عملگرهای query استاندارد است که معماری لازم جهت حرکت ، فيلترينگ و اجرای عملیات بر روی تقريبا" هر نوع منبع داده نظیر XML ، بانک های اطلاعاتی رابطه ای و اشياء درون حافظه را فراهم می نماید .
قبل از هر چيز اجازه دهيد ببينيم LINQ چيست ؟

LINQ چيست ؟
با این که فناوری LINQ در پائيز سال 2005 مطرح گردید ولی فرآیند پیاده سازی آن از سال 2003 آغاز شده بود . هدف از ابداع فناوری فوق، ارائه تسهيلات لازم برای پياده کنندگان جهت کار با داده در بانک های اطلاعاتی SQL و XML عنوان شده است. در واقع ، وجود یک حلقه گمشده بین داده رابطه ای ( بانک های اطلاعاتی ) ، اسناد XML با زبان های برنامه نویسی ، ضرورت ابداع فناوری فوق را توجيه کرده بود . پياده کنندگان مجبور بودند برای کار با هر يک از منابع داده ، از روش های مختلفی استفاده نمایند . LINQ را می توان به منزله حلقه ای گمشده بین دنیای داده و زبان های برنامه نویسی همه منظوره تصور کرد . با استفاده از LINQ امکان دستیابی به داده صرفنظر از نوع داده ، با روشی مشابه و یکسان فراهم می گردد .
پیاده کنندگان نرم افزاردر زمان نوشتن برنامه های خود معمولا" از دو زبان مختلف جهت رسیدن به یک هدف مشترک استفاده می نمایند . ما برای نوشتن کدها از یک زبان برنامه نویسی نظیر VB.NET و يا #C و برای گفتگو با سیستم بانک اطلاعاتی از یک زبان دیگر نظیر SQL استفاده می کنيم .
برای سفارش شام خود از یک زبان و برای سفارش چای از زبان دیگر !

این موضوع می تواند چالش های متعددی را برای پياده کنندگان نرم افزار به دنبال داشته باشد :
  • در مواردی که فريمورک دات نت را به عنوان پلت فرم انتخاب کرده باشیم ، دات نت قادر به درک کدهای SQL نخواهد بود.
  • در مواردی که از زبان های برنامه نویسی حمايت شده در دات نت جهت نوشتن کد در محيط ويژوال استوديو استفاده می کنيم ، همواره یک ابزار قدرتمند در کنار ما است تا در صورت اشتباه در گرامر دستورات توصیه های لازم را ارائه نماید ( IntelliSense ) .از ويژگی فوق نمی توان در ارتباط با SQL استفاده کرد .
  • امکان بررسی نوع ها در زمان ترجمه وجود ندارد . این بدان معنی است که پياده کنندگان تا زمانی که برنامه اجراء نگردد ، نمی توانند مشکلات احتمالی را مشاهده و قبل از زمان اجراء با آنها برخورد نمایند .
  • شرکت مايکروسافت امکانات متعددی را در فريمورک دات نت جهت کار با اسناد XML ارائه کرده است . ارائه System.Xml ، System.Xml.XPath و System.Xml.Schema نمونه هائی در این زمینه می باشند . پياده کنندگان نرم افزار در زمان کار با اسناد XML مجبور بودند که از فناوری های متعددی نظیر DOM ( برگرفته شده از Document Object Mode ) و XQuery استفاده نمایند . همين موضوع باعث شده بود که کار با اسناد XML نظیر خواندن و یا نوشتن داده در آنها برای بسیاری از پياده کنندگان مشکل باشد.
شرکت مايکروسافت برای حل مشکلات فوق ، بررسی دو راهکار را در دستور کار خود قرار داد :
  • ایجاد پتانسیل های مورد نیاز مختص XML و یا داده رابطه ای در هر یک از زبان های برنامه نویسی و زمان اجراء . راهکار فوق نه تنها مشکل اصلی را حل نمی کرد بلکه در مواردی مشکلات را خصوصا" در زمینه نگهداری افزایش می داد .
  • اضافه کردن قابلیت های همه منظوره نوشتن query در فریمورک دات نت . به عبارت دیگر یک فریمورک همه منظوره با قابلیت نوشتن query درون فريمورک دات نت که زبان های VB.NET و #C بتوانند به سادگی از مز ایای آن استفاده نمایند .
خوشبختانه ، شرکت مایکروسافت گزينه دوم را انتخاب نمود . ایجاد یک زیرساخت جهت نوشتن query در بين اشياء ، اسناد XML ، داده رابطه ای و ...
هم اینک پیاده کنندگان می توانند از مزايای یک الگوی تعريفی در هر یک از زبان های دات نت جهت کار با داده استفاده نمایند . ارائه مجموعه اپراتورهای استاندارد جهت نوشتن query یکی از دستاوردهای مهم LINQ محسوب می گردد . بدین ترتیب ، پياده کنندگان می توانند با بکارگیری یک مجموعه يکسان از اپراتورهای نوشتن query در هر یک از زبان های برنامه نویسی حمایت شده در دات نت ، از داده ذخیره شده در منابع داده مختلف صرفنظر از نوع منبع داده استفاده نمایند . همچنين ، امکان استفاده از پتانسیل هائی نظیر IntelliSense و بررسی نوع ها در زمان ترجمه نیز وجود خواهد داشت .


شکل 1 نحوه عملکرد LINQ را نشان می دهد .



شکل 1 : عملکرد فناوری LINQ
مثال
ادامه مطلب ..


ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد
Professional LINQ (Programmer to Programmer)
 
 
 
book img
 
 

 

Book Description
Professional LINQ introduces experienced programmers and database developers to LINQ database queries in their native VB and C# languages. Some of the topics covered include:

    * LINQ Queries
    * LINQ and the Standard Query Operators
    * Programming with XLinq
    * Querying XML with XLinq
    * Mixing XML and other data models
    * DLinq and Queries
    * LINQ over datasets
    * Interoperating with ADO.NET
    * LINQ and ASP.NET



From the Back Cover
Professional LINQ


Are you ready to revolutionize the way you can work with data? This book shows you how to effectively utilize LINQ so that you can query XML, SQLdatabases, ADO.NET DataSets, and other data sources, and it also delvesdeeper into the technology to demonstrate how LINQ can dramatically improve your applications.

Database pro Scott Klein first examines LINQ and Visual Studio® 2008, the language-specific features that support LINQ, as well as LINQ queries and the LINQ standard query operators. He then shows you how to program with LINQ to XML with both C# and Visual Basic® and how to use LINQ to XML with other data models. Plus, he walks you through LINQ to SQL queries, advanced query concepts, LINQ to Entities, and LINQ to DataSets. All of this valuable insight will provide you with powerful new tools so that you can easily extend and access information in your databases.

What you will learn from this book

    *

      Features of Visual Studio 2008 and the .NET Framework that will help you better understand LINQ
    *

      The syntax to use when writing LINQ queries
    *

      The concepts, techniques, and programming fundamentals necessary to program with LINQ to XML
    *

      How to use LINQ to XML with Visual Basic .NET
    *

      All about LINQ to SQL queries and concepts
    *

      Ways to work with the DataContext class and entity objects
    *

      How to build applications using LINQ and associated LINQ providers

Who this book is for
This book is for developers who want to learn about LINQ and how it can benefit and enhance their applications.

How secure is your network? The best way to find out is to attack it. Network Security Assessment provides you with the tricks and tools professional security consultants use to identify and assess risks in Internet-based networks-the same penetration testing model they use to secure government, military, and commercial networks. With this book, you can adopt, refine, and reuse this testing model to design and deploy networks that are hardened and immune from attack.

Network Security Assessment demonstrates how a determined attacker scours Internet-based networks in search of vulnerable components, from the network to the application level. This new edition is up-to-date on the latest hacking techniques, but rather than focus on individual issues, it looks at the bigger picture by grouping and analyzing threats at a high-level. By grouping threats in this way, you learn to create defensive strategies against entire attack categories, providing protection now and into the future.

Network Security Assessment helps you assess:

    * Web services, including Microsoft IIS, Apache, Tomcat, and subsystems such as OpenSSL, Microsoft FrontPage, and Outlook Web Access (OWA)


    * Web application technologies, including ASP, JSP, PHP, middleware, and backend databases such as MySQL, Oracle, and Microsoft SQL Server


    * Microsoft Windows networking components, including RPC, NetBIOS, and CIFS services


    * SMTP, POP3, and IMAP email services


    * IP services that provide secure inbound network access, including IPsec, Microsoft PPTP, and SSL VPNs


    * Unix RPC services on Linux, Solaris, IRIX, and other platforms


    * Various types of application-level vulnerabilities that hacker tools and scripts exploit


Assessment is the first step any organization should take to start managing information risks correctly. With techniques to identify and assess risks in line with CESG CHECK and NSA IAM government standards, Network Security Assessment gives you a precise method to do just that.
 
pdf format 
دانلود کتاب : ادامه مطلب


ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد


ناشر :Apress
سال انتشار :2007
9781590598405:ISBN
تعداد صفحات:150
زبان:انگلیسی
سطح:متوسط و نيم حرفه اي و حرفه ای

linq with vb

کتاب LINQ for visual VB 2005 از انتشارات Apress و پدیدآورنده ی آن Fabio Claudio Ferracchiati می باشد.این کتاب از سری firstpress می باشد.

در واقع firstpress منبعی برای درک جدیدترین تکنولوژی ها می باشد.بدون این کتاب ها برای دانستن تکنولوژی های جدید شما مجبور خواهید بود که وقت بسیار زیادی بگذارید.

این کتابها در وقت و تلاش شما صرفه جویی می کند.با استفاده از این سری کتابها قادر خواهید بود در تکنولوژی های جدید پیشرو باشید و این سری کتابها در هر دو نوع الکترونیکی

 (بصورت Ebook) و هم بصورت کاغذ چاپی وجود دارد.در کنفرانس developer های حرفه ای مایکروسافت در سال 2005 مایکروسافت یک تکنولوژی جدید را نوید داد

(Language Integrated Query (LINQ .این تکنولوژی در برنامه های شیءگرا کاربرد دارد.با استفاده از این تکنولوژی قادر خواهید بود از XML و از بانک اطلاعاتی SQL Server و از

آرایه ها در حافظه query بگیرید.این کتاب در سه بخش سازماندهی شده است:مدیریت داده ها در حافظه (LINQ To Objects) و دستیابی به بانک اطلاعاتی رابطه ای

(LINQ To ADO.NET) و دستکاری اسناد اکس ام ال  (LINQ To XML).در هر قسمت نیز مثال های زیادی آورده شده است.خود نویسنده ی کتاب

 هدف این کتاب را آموزش سریع افراد برای کار با LINQ اعلام می کند.این کتاب در کل 178 صفحه می باشد.اگر می خواهید با این تکنولوژی

جدید مایکروسافت آشنا شوید و query هایی حرفه ای بنویسید این کتاب را مطالعه کنید.

این کتاب در واقع همان کتاب LINQ For Visual C# 2005 می باشد و تنها تفاوت آن زبان آن می باشد که کدهای این کتاب به زبان VB.NET می باشد.

به ادامه مطلب بروید.



ادامه مطلب...
Subscribe
ارسال در تاريخ یکشنبه بیست و ششم آبان 1387 توسط سعيد


ناشر :Apress
سال انتشار :2007
9781590598269:ISBN
تعداد صفحات:150
زبان:انگلیسی
سطح:متوسط,حرفه ای وفوق حرفه ای

کتاب الکترونیکی LINQ for visual C# 2005


کتاب LINQ for visual C# 2005 از انتشارات Apress و پدیدآورنده ی آن Fabio Claudio Ferracchiati می باشد.این کتاب از

 سری firstpress می باشد.در واقع firstpress منبعی برای درک جدیدترین تکنولوژی ها می باشد.بدون این کتاب ها برای

 دانستن تکنولوژی های جدید شما مجبور خواهید بود که وقت بسیار زیادی بگذارید.این کتابها در وقت و تلاش شما صرفه جویی

می کند.با استفاده از این سری کتابها قادر خواهید بود در تکنولوژی های جدید پیشرو باشیدو این سری کتابها در هر دو نوع

 الکترونیکی (بصورت Ebook) و هم بصورت کاغذ چاپی وجود دارد.در کنفرانس developer های حرفه ای مایکروسافت

 در سال 2005 مایکروسافتیک تکنولوژی جدید را نوید داد: Language Integrated Query)LINQ) .این تکنولوژی در برنامه های

 شیءگرا کاربرد دارد.با استفاده ازاین تکنولوژی قادر خواهید بود از XML و از بانک اطلاعاتی SQL Server واز آرایه ها در

 حافظه query بگیرید.

این کتاب در سه بخش سازماندهی شده است:


مدیریت داده ها در حافظه (LINQ To Objects) و دستیابی به بانک اطلاعاتی رابطه ای (LINQ To ADO.NET) و دستکاری اسناد XML

(LINQ To XML).در هر قسمت نیز مثال های زیادی آورده شده است.خود نویسنده ی کتاب هدف این کتاب را آموزش سریع افراد برای

 کار با LINQ اعلام می کند.این کتاب در کل 174 صفحه می باشد.اگر می خواهید با این تکنولوژی جدید مایکروسافت آشنا شوید و

query هایی حرفه ای بنویسید این کتاب را مطالعه کنید.

برای دانلود به ادامه مطلب رجوع کنید.



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه بیست و پنجم آبان 1387 توسط سعيد

ارتباط LINQ با SQL

برای بازیابی اطلاعات از پایگاه داده SQL روشی مشابه روش بالا مورد استفاده قرار می­گیرد. تنها تفاوت موجود به تعیین منبع داده در قسمت from از عبارت پرس و جوی LINQ مربوط می­گردد. در اینجا باید برای بازیابی اطلاعات از جداول داده و استفاده در برنامه کلاس­هایی را ایجاد کرد.

اولین کار اضافه کردن فضانام مربوط به استفاده از LINQ to SQL<> می باشد. برای این کار باید فضانام System.Data.Linq را به پروژه اضافه کنید. البته باید اسمبلی این فضانام را به Reference های برنامه اضافه نمود. اسمبلی حاوی این فضانام به صورت پیش فرض در لیست موجود در پنجره Add Reference به نام System.Data.Linq.dll وجود دارد.

پس از این کار باید به ازاء هر جدولی که قصد داریم در برنامه از آن استفاده کنیم، یک کلاس ایجاد کرد. البته تعریف این کلاس قدری با تعریف کلاس­های معمولی در #C تفاوت دارد.

برای شروع ایجاد کلاس ابتدا جدول زیر را در نظر بگیرید. در این جدول 3 فیلد وجود دارد.

در کلاسی که قرار است با این جدول ارتباط داده شود باید به ازاء هر فیلد در جدول یک فیلد خصوصی در کلاس ایجاد کنید؛ و البته برای دسترسی به اطلاعات این فیلد خصوصی باید یک خصوصیت عمومی نیز تعریف شود.

تفاوتی که در بالا به آن اشاره شد، به استفاده از ویژگی­هایِ جدید #C در تعریف کلاس برمی­گردد. اولین ویژگی، ویژگی Table است. هدف استفاده از این ویژگی این است که به کامپایلر اعلام شود این کلاس قرار است با کدام جدول در پایگاه داده ارتباط داده شود

[Table(Name = "Person")]

public class Person

{

}

خصوصیت Name از این ویژگی در واقع بیانگر نام جدول است. اگر از این خصوصیت استفاده نکنید، کامپایلر به صورت خودکار نام کلاس را به عنوان نام جدول در نظر می گیرد.

[Table(Name = "Person")]

public class Person

{

}

در ادامه باید فیلدهایِ خصوصی مناسبی برای نگهداری اطلاعات فیلدهای موجود در جدول ایجاد شود. ایجاد این فیلدها مانند ایجاد فیلدهای عادی است.

[Table(Name = "Person")]

public class Person

{

    private int _ID;

}

حال باید برای دسترسی به اطلاعات این فیلدها و همچنین ارتباط آنها با ستون های موجود در جدول، خصوصیت­های مناسبی تعریف کرد. البته در تعریف خصوصیت­ها باید از ویژگی Column نیز استفاده کرد.

[Column(Name = "ID", Storage = "_ID", DbType = "int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]

    public int ID

    {

        get { return _ID; }

        set { _ID = value; }

    }

از این خصوصیت برای دسترسی به اطلاعات فیلد ID_ استفاده می­شود. البته با استفاده از ویژگی Column ستونی در جدول که قرار است اطلاعات آن در فیلد _ID قرار گیرد مشخص می­شود. در اینجا ستون مورد نظر ID است.

ویژگی Column دارای خصوصیات متعددی است. در ادامه تعدادی از آنها را که پر کاربرد هستند توضیح می­دهم.

Name: از این خصوصیت برای تعیین نام ستون مورد نظر در جدول داده­ها استفاده می­شود.

Storage: با استفاده از این خصوصیت نام فیلدی که قرار است اطلاعات ستون مورد نظر در آن قرار گیرد مشخص می شود.

DbType: از این خصوصیت برای تعیین نوعی که در جدول برای ستون مورد نظر در نظر گرفته شده است، استفاده می­کنیم. با به کارگیری این خصوصیت، کامپایلر قادر به چک کردن نوع مقادیری که انتساب داده می­شوند در زمان کامپایل می­باشد.

IsPrimaryKey: اگر ستونی که قرار است آن را Bind کنیم در جدول به عنوان کلید اصلی در نظر گرفته شده باشد، با استفاده از این خصوصیت باید این مورد را به کامپایلر و LINQ اعلام کرد.

IsDbGenerated: اگر در تعریف ستون مورد نظر در پایگاه داده اعلام شده باشد که مقدار این فیلد در توسط خود پایگاه داده تولید می­شود، باید از این خصوصیت به همراه مقدار true استفاده کرد.

در زیر کد کاملی که برای کلاس Person باید نوشته شود را مشاهده می کنید.

[Table(Name = "Person")]

public class Person

{

    private int _ID;

    private string _lastName;

    private string _firstName;

 

    [Column(Name = "ID", Storage = "_ID", DbType = "int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]

    public int ID

    {

        get { return _ID; }

        set { _ID = value; }

    }

 

    [Column(Name = "LastName", Storage = "_lastName", DbType = "nvarchar NOT NULL")]

    public string LastName

    {

        get { return _lastName; }

        set { _lastName = value; }

    }

               

    [Column(Name = "FirstName", Storage = "_firstName", DbType = "nvarchar NOT NULL")]

    public string FirstName

    {

        get { return _firstName; }

        set { _firstName = value; }

    }

}

تا بدین­جا کلیه عملیات لازم برای ذخیره اطلاعات جدول Person در اشیاء موجود در برنامه انجام شده است. اکنون باید برای برقراری ارتباط با پایگاه داده تدبیری اندیشید برای اینکار دیگر لازم نیست مانند قبل از اشیاء SqlConnection استفاده کرد. LINQ برای برطرف کردن این مورد کلاسی به نام DataContext معرفی کرده است.  برای استفاده از ویژگی­های این کلاس می­بایست ابتدا کلاسی ایجاد کنید و از کلاس DataContext ارث بری کنید

public partial class PeopleDataContext : DataContext

{

}

حال باید در سازنده کلاس PeopleDataContext سازنده کلاس پدر (DataContext) را فراخوانی کرد. در واقع DataContext یک کانال دوطرفه برای ارتباط با پایگاه داده می­باشد. یعنی از یک طرف دستورات LINQ را گرفته و آن را به دستورات معادل در SQL تبدیل می کند و آن را به سمت سرور پایگاه داده منتقل می­کند. و پس از اجرای دستورات در سرور نتایج بدست آمده را دریافت و در اشیاء مربوط در برنامه قرار می دهد.

بنابراین برای ارتباط به سرور پایگاه داده در کلاس DataContext سازنده های مختلفی در نظر گرفته شده است. ساده ترین سازنده استفاده از یک رشته اتصال است که در مدل­های قبلی اتصال به پایگاه داده نیز مورد استفاده قرار می گرفت.

برای این منظور باید کلاس PeopleDataContext را به صورت زیر تغییر داد:

public partial class PeopleDataContext : DataContext

{

    public PeopleDataContext(String connString) :

        base(connString) { }

}

بنابراین باید در هنگام نمونه سازی از این کلاس، باید رشته اتصال مورد نظر را به سازنده این کلاس ارسال کرد. کمی صبر کنید؛ هنوز کار تمام نشده است. باید برای نگهداری اطلاعاتی که قرار است از جدول Person بازیابی شوند باید شئ ای از نوع

public Table People;

نوع Table یک کلاس جامع می باشد که توسط LINQ ارائه شده است.

اکنون همه چیز برای انجام پرس و جو ار پایگاه داده آماده است. فرض کنید که می­خواهیم اطلاعات افرادی که شماره شناسایی (ID) از 2 بیشتر است را بازیابی کنیم و در یک کنترل DataGridView نشان دهیم. برای این کار باید از کدهایی زیر استفاده کنیم.

private void btnLoad_Click(object sender, EventArgs e)

{

    String connString = @" Data Source=.;Initial Catalog=People; Integrated Security=True";

    PeopleDataContext people = new PeopleDataContext(connString);

    var query = from p in people.People

                where p.ID > 2

                select p;

    dataGridView1.DataSource = query;

}

کدهای فوق در رویداد کلیک از کنترل button نوشته شده است.


همانطورکه مشاهده می­کنید نحوه پرس و جو دقیقاً مانند روشی است که برای پرس و جو از اشیاء درون حافظه به کار می­رود؛ فقط باید منبع داده­ای که برای پرس و جو در نظرگرفته شده است را مطابق با نیاز تنظیم کنیم. در انتها نیز برای نشان داده اطلاعات بازیابی شده کافی است به خصوصیت DataSource از کنترل DataGridView را به متغیری که برای ارجاع به خروجی پرس و جو در نظر گرفته شده است مرتبط کنیم.

کلاس DataContext خصوصیات پیشرفته دیگری نیز دارد که در ادامه تعدادی از آنها و همچنین نحوه درج و حذف اطلاعات را نیز بررسی می­کنیم.

یکی از خصوصیات جالب کلاس DataContext خصوصیت Log می­باشد. از این خصوصیت برای بدست آوردن دستوری که DataContext برای ارسال به پایگاه داده ایجاد می کند، استفاده می شود. به عنوان مثال تکه برنامه زیر را در نظر بگیرید، با استفاده از خصوصیت Log دستور Selectی که برای بازیابی اطلاعات ایجاد شده است، را مشاهده می کنیم.

String connString = @"Server=.;database=People;integrated security=sspi";

PeopleDataContext people = new PeopleDataContext(connString);

people.Log = Console.Out;

var query =

from p in people.People

where p.ID == 1

select new

{

    p.LastName, p.FirstName

};

foreach (var row in query)

{

    Console.WriteLine("Name: {0}, {1}",row.LastName, row.FirstName);

}

خروجی این برنامه که در حالت Console نوشته شده است، به صورت زیر می­باشد.

Asdadasdasd

 

مشاهده می­شود که دستور مورد نظر ما با گرامر SQL توسط DataContext ایجاد شده است.

درج رکورد با استفاده از LINQ

برای درج یک رکورد جدید با استفاده از LINQ فقط کافیست که یک شئ جدید از نوع کلاسی که به جدول مورد نظر شما Bind شده است، ایجاد کنید و سپس آن را به فیلدی که از نوع

به عنوان مثال کدهای زیر یک رکورد جدید به جدول Person اضافه می­کند.

Person person = new Person();

person.FirstName = txtName.Text;

person.LastName = txtFamily.Text;

people.People.Add(person);

people.SubmitChanges();

 

توجه داشته باشید که در رکورد جدید مقداری برای فیلد ID در نظر گرفته نشده است؛ زیرا این فیلد باید توسط پایگاه داده مقداردهی گردد. در اینجا یکی دیگر از مزیت­های LINQ به چشم می­خورد. پس از اینکه متد ()SubmitChanges فراخوانی گردید اطلاعاتی که توسط پایگاه داده تولید می­شود به شئ موجود در برنامه برگشت داده می­شود. بنابراین برای اعلام شماره شناسایی افراد لازم نیست که با دیگر یک پرس و جو بر روی جدول اعمال شود. زیرا در همان رکوردی که اطلاعات فرد قرار دارد شماره شناسایی وی نیز قرار گرفته است.

البته اگر از خصوصیت Log در کلاس DataContext برای بدست آوردن دستوری که برای پایگاه داده ارسال شده است، استفاده کنید، مشاهده خواهیم کرد که پس از دستور Insert یک دستور Select استفاده شده است و در آن با استفاده از تابع ()Scope_Identity آخرین مقداری که به فیلدی که خصوصیت Identity آن true است برگشت داده می­شود.

 

ویرایش رکوردها

برای ویرایش رکوردها ابتدا باید رکورد مورد نظر را بازیابی کنیم و سپس اطلاعات موجود در آن را تغییر دهیم و سپس با استفاده از فراخوانی متد ()SubmitChanges تغییرات را به پایگاه داده ارسال کرد. در اینجا یکی دیگر از مزیت­های LINQ مورد استفاده قرار می­گیرد. در LINQ سرویسی به نام سرویس پیگیری تغییرات وجود دارد؛ با استفاده از این سرویس تغییرات اعمال شده بر روی داده­ها پیگری می­شود. اگر متد ()SubmitChanges فراخوانی شود و این در حال باشد که در اطلاعات موجود تغییری داده نشده باشد، LINQ از ایجاد دستور Update و ارسال برای پایگاه داده خودداری می­کنید.

در تکه برنامه زیر ابتدا رکوردی بازیابی شده و سپس مقدار خصوصیات آن تغییر می­کند. در انتها با فراخوانی متد ()SubmitChanges تغییرات به پایگاه داده اعمال می­گردد.

public String connString = @"Server=.;database=People;integrated security=sspi";

PeopleDataContext people = new PeopleDataContext(connString);

 var person = people.People.Single(p => p.ID == 1);

person. FirstName="A";

person. LastName="A";

people.SubmitChanges();

 

با اجرای برنامه مقادیر فیلدهای نام و نام خانوادگی فردی که شماره شناسایی وی برابر 1 می­باشد به A تغییر پیدا کرده و با فراخوانی متد ()SubmiyChanges دستور مناسبی تولید شده و برای پایگاه داده ارسال می­گردد. حال اگر دوباره برنامه را اجرا کنیم با توجه به اینکه تغییری در اطلاعات حاصل نمی­شود بنابراین دستوری برای ارسال به پایگاه داده ایجاد نمی­شود.

 

حذف رکورد­ها

حذف رکورد از دو عمل قبل کاملاً آسانتر است. برای اینکار کافی است که اطلاعات را از جدول بازیابی کنید و سپس با استفاده از متد ()Remove شئ مربوطه را حذف کنید. در زیر قطعه کدی برای این منظور نوشته شده است.

var person = people.People.Where (p => p.IDRole == 1);

people.People.Remove(person);

people.SubmitChanges();

در این برنامه اطلاعات فردی که شماره شناسایی وی برابر با 1 می­باشد از پایگاه داده حذف می­شود.

 

امکانات اضافی LINQ

ممکن است بسیاری از برنامه نویسان فکر کنند که ایجاد کلاس­های موجودیت برای برنامه­های بزرگ که بانک اطلاعاتی بسیار بزرگی دارند، مقرون به صرفه نباشد و استفاده از مدل­های قبلی بسیار مفیدتر باشد.

البته این تفکر شاید تا حدودی درست باشد. اما با تاملی دوباره و عمیق درباره استفاده شئ­گرایانه از بانک­های اطلاعاتی ارتباطی می­تواند بر روی این مشکل سرپوش بگذارد. البته جای نگرانی نیز وجود ندارد؛ زیرا سازندگان این اثر نیز به فکر این مشکل بوده­اند و برای حل آن ابزارهایی نیز ارائه کرده­اند.

یکی از این ابزار­ها که بسیار پرکاربرد نیز می­باشد، ابزار SQLMetal می­باشد. با استفاده از این ابزار می­توانید کلاس­های موجودیت برای تمامی جداول موجود در پایگاه داده را ایجاد کنید. برای این منظور ابتدا باید خط فرمان که توسط Visual Studio 2008 ارائه شده است را اجرا کنید و از این ابزار استفاده کنید.

دستور زیر را در نظر بگیرید:

sqlmetal /server:. /database:People /pluralize /code:People.cs

 

با استفاده از این دستور کلاس­های موجودیت که در بانک اطلاعاتی People وجود دارد در فایل People.cs ایجاد می­شود و به راحتی می­توانید با اضافه کردن این فایل به پروژه از کلاس­های آن استفاده کنید.

این ابزار پارامترهای متعددی دارد که در ادامه تعدادی از پر کاربردترین آنها را شرح می­دهیم:

Server: از این پارامتر برای تعیین سرور پایگاه داده استفاده می­شود. در این مثال با توجه به اینکه پایگاه داده در کامپیوتر محلی قرار دارد از علامت نقطه (.) استفاده شده است.

Database: از این پارامتر برای تعیین نام پایگاه داده­ای که قرار است براساس آن کلاس­های موجودیت ایجاد شود، استفاده می­شود.

Pluralize: از این پارامتر برای تعیین گرامر انگلیسی در ایجاد نام کلاس­ها و خصوصیات استفاده می­شود.

Code: از این پارامتر برای تعیین محلی که باید کلاس­های موجودیت در آن قرار گیرند استفاده می­شود. البته براساس پسوند فایل زبان C# و یا VB برای ایجاد کلاس­ها استفاده ­می­شود. برای این کار می­توان از پارامتر Language نیز استفاده کرد.

این ابزار پارامترهای دیگری نیز دارد. برای درک عملکرد آن پارامترها می­توانید به منابعی که ذکر می­شود مراجعه کنید.

 

منابع مورد استفاده :

·         کتاب "LINQ در C# 2008" تالیف گروه واژه

·         Ebook های موجود در سایت PersiaDevelopers

نکته: برای تست کدهای این مقاله از Visual Studio 2008 Beta 2 استفاده شده است. در ویرایش نهایی این نرم­افزار تغییرات جزئی در LINQ to SQL اعمال شده است. این تغییرات در حال بررسی می­باشند و در مقاله­های بعدی ممکن است برای شما عزیزان قرار داده شود.

 

Subscribe
ارسال در تاريخ جمعه بیست و چهارم آبان 1387 توسط سعيد

امروزه دیگر نمی­توان منکر کاربرد نرم­افزار­های کامپیوتری در زندگی روزمره بشر گردید. همچنین در اکثر برنامه­هایی که امروزه بر روی کامپیوتر­ها به کار می­روند، استفاده از بانک­های اطلاعاتی انکارناپذیر است. به همین دلیل از اوایل دهه 80 میلادی تلاش­های فراوانی برای بهبود نرم­افزاری­های بانک اطلاعاتی گردید و منجر به ظهور مدل­های جدید و متعددی برای ایجاد پایگاه­های داده گردید. یکی از این مدل­ها که هم اکنون در بسیاری از نرم­افزارها پیاده سازی شده است مدل RDBMS می­باشد. به عنوان نمونه می­توان SQL Server و همچنین Oracle را نام برد. در حال حاضر، برای ایجاد و توسعه برنامه­های مبتنی بر بانک­های اطلاعاتی، این دو نرم­افزار بیشتر از مدل­های مشابه مورد استفاده قرار می­گیرند.

پس از انتخاب نرم­افزار ارائه دهنده خدمات بانک اطلاعاتی، نوبت به انتخاب زبان برنامه نویسی می­رسد. در اینجا نیز ذکر این مورد کافیست که اگر نگاهی که گذشته داشته باشیم متوجه می­شویم که در بیست سال گذشته زبان­هایِ با قابلیت برنامه نویسی شئ­گرا به عنوان اولین و بهترین زبان برای توسعه نرم­افزارها در نظر گرفته می­شوند. در میان زبان­های با قابلیت برنامه نویسی شئ­گرا زبان #C و Java از امکانات بهتری برخوردارند.

با نگاهی به دو نرم­افزار انتخاب شده در بالا متوجه به تضادی می­شویم که از گذشته تا کنون گریبان­گیر برنامه­نویسان متعددی بوده است. با توجه به اینکه SQL Server یک بانک اطلاعاتی رابطه­ای است پس نمی­توان با آن به صورت شئ­گرا در برنامه­­ها ارتباط برقرار کرد. البته مایکروسافت برای رفع این مشکل تا قبل از سال 2005 فعالیت­هایی نظیر ارائه DataSet و ADO.NET انجام داده است. اما با این حال هنوز نمی­توان به صورت کاملاً شئ­گرا با این مدل از بانک­های اطلاعاتی ارتباط برقرار کرد.

در این میان شرکت­های مطرح نرم­افزاری دنیا مانند Mircrosoft نیز بیکار نمانده­اند و بر روی پروژه­هایی برای رفع مشکل یاد شده در بالا فعالیت نموده­اند. مهمترین و بهترین پروژه­ای که در این مورد بر روی آن کار شده است پروژه LINQ می­باشد. با استفاده از این تکنولوژی دیگر نیاز به کار بردن روش­های متفاوت برای بازیابی اطلاعات از منابع داده­ای گوناگون مانند بانک­های اطلاعاتی رابطه­ای، اسناد XML و حتی اشیاء درون حافظه نیست. در این روش از یک گرامر مشابه برای بازیابی اطلاعات از هر نوع منبع داده­ای استفاده می­شود؛ و البته گرامری که این روش از آن استفاده می­کند به صورت شئ­گرا می­باشد.

در ادامه نگاهی کلی بر فرم کلی این روش خواهیم انداخت و سپس به توضیح و بررسی قسمت­های مخلتف پروژه می­پردازیم.

برای درک کلی گرامر این روش مثال زیر را در نظر بگیرید:

 

int[ ] i= {1,2,3,4,5,6,7,8,9,10,11};

var query = from p in i

            where p>=5      

            select p;

objectdumper.write(query);

 

اگر کدهای بالا را کامپایل و اجرا کنید کلیه اعدادی که در آرایه i از عدد 5 بیشتر می­باشند انتخاب و در متتغیر query ذخیره می­شوند. این مدل استفاده از LINQ به مدل عملگری مشهور است. کامپایلر #C پس از برخورد با این عبارت آن را به فراخوانی متد­هایی تبدیل می­کند. پس از تبدیل، عبارت پرس و جوی بالا به صورت زیر در خواهد آمد.

var query= i.where(p=> p>5);

خروجی هر دو مدل معادل یکدیگر می­باشند. متغیر p که در هر دو حالت از آن استفاده شده است برای حرکت در مجموعه مورد نظر، به کار می­رود و در هر بار به یک عنصر در این مجموعه اشاره می­کند.

در مورد کلاس ObjectDumper باید به عرض برسانم که این ابزار یک کلاس ساده با یک متد به نام ()Write است و از آن برای تهیه خروجی قالب­دار استفاده می­شود. این بدان معناست که دیگر برای چاپ اطلاعات لازم نیست با استفاده از ساختارهای تکرار در مجموعه مورد نظر حرکت کنید و با استفاده از متد ()Writeو یا ()WriteLine که در کلاس Console قرار دارند اطلاعات را چاپ کنید.

ObjectDumper  هنگام نصب NET. بر روی کامپیوتر شما کپی می­شود. بنابراین برای استفاده از آن کافییست فایل Objectdumper.cs را جستجو کرده و آن را به پروژه خود اضافه کنید.

اما اگر به جای استفاده از LINQ، بخواهیم با استفاده از روش­های متداول قبلی این کار را انجام دهیم باید از دستوراتی مانند زیر استفاده نمود.

 

       

int[] i= {1,2,3,4,5,6,7,8,9,10,11};

for (int j = 0; j < i.Length ; j++)

{

    if (i[j]>=5)

    {

        Console.WriteLine(i[j]);

    }

}

همانطور که مشاهده می­کنید استفاده از LINQ برای بازیابی اطلاعات بسیار ساده­تر و قابل فهم­تر می­باشد. البته مزیت دیگر این تکنولوژی به گرامر آن بر­می­گردد. گرامر LINQ بسیار شبیه به گرامر SQL است؛ با توجه به اینکه کمتر برنامه­نویسی پیدا می­شود که با گرامر SQL آشنایی نداشته باشد، لذا استفاده از این گرامر بهترین انتخاب برای این تکنولوژی به حساب میرود.

در ادامه قصد دارم که با بررسی مثالی پیچیده­تر وارد جزئیات LINQ شوم. برای این منظور ابتدا یک کلاس به نام Person که دارای 4 خصوصیت می باشد به صورت زیر تعریف می­کنم.

Class Person

{

}

تکه کد زیر را در در نظر بگیرید:

List people = new List

{

   new Person{ID=1, IDRole=1, LastName="Andy", FirstName="Brad"},

   new Person{ID=2, IDRole=2, LastName="Gray", FirstName="Tom" },

   new Person{ID=3, IDRole=2, LastName="Gran", FirstName="Mary"},

   new Person{ID=4, IDRole=3, LastName="Cops", FirstName="Gary"}

};

var query = from p in people

                 where p.FirstName.Length  ==  4

                 select new

            {

                p.FirstName, p.LastName

            };

ObjectDumper.Write(query);

در این برنامه چند نکته جالب توجه وجود دارد که از خصوصیت جدید C# 3.0 می باشد. در ابتدای کار ممکن است تعجب کنید که چرا برای شئ people نوعی در نظر گرفته نشده است و از کلمه کلیدی var استفاده شده است.

آیا var یک نوع جدید در C# می باشد؟ در جواب باید گفت که نه؛ در C# 3.0 می­توان متغیرهای محلی با نوع­های ضمنی ایجاد کرد. این بدان معناست که دیگر الزامی نیست که برای متغیرها حتماً یک نوع عرفی تعیین کنید و با گذاشتن کلمه کلیدی var قبل از تعریف متغیر به کامپایلر اعلام می­کنید که نوع این متغیر را براساس عبارتی که برای مقداردهی اولیه آن در نظر گرفته شده است تعیین کند.

به عنوان مثال هر دو دستور زیر معادل یکدیگر می باشند:

var n = 5;

int n = 5;

در استفاده از کلمه کلیدی var باید توجه داشته باشید که متغیری که با این نوع اعلام می­شود باید حتماً مقداردهی اولیه گردد؛ در غیر اینصورت برنامه با خطای کامپایلری روبرو می­شود.

استفاده از کلمه کلیدی var برای تعیین نوع خروجی پرس و جوهای پیچیده­ای که در ادامه ممکن است با آنها روبرو شویم بسیار مفید است و برنامه نویس را از قید تعیین یک نوع تعریف شده برای خروجی پرس و جوها آزاد می­سازد.

به توضیح ادامه برنامه بالا برمی­گردیم. در ابتدا یک شئ از نوع

با استفاده از مقداردهنده اولیه به اشیاء، همانند مقداردهنده اولیه به آرایه­ها، می­توانید بدون فراخوانی سازنده کلاسی که از روی آن نمونه­سازی انجام می­گیرد (و یا فراخوانی متدهایی که برای درج در نظر گرفته شده اند مانند ()Add در کلاس

Person p1= new Person{ID = 1, FirstName="A", LastName="A"};

Person p2 = new Person();

p2.ID = 1;

مشاهده می­کنید که با استفاده از این خصوصیت کار ایجاد اشیاء چقدر آسانتر می­شود. در ادامه با استفاده از یک پرس و جو ساده نام و نام خانوادگی افرادی که طول فیلد نام آنها برابر 4 باشد بازیابی و نشان داده می­شود.

همانطورکه مشاهده می­کنید دستوری که برای این منظور در نظر گرفته شده است بسیار شبیه به دستور قبلی است.

امیدوارم که تا اینجای کار متوجه اصول کلی کار با LINQ شده باشید. در LINQ عملگرهای پرس و جو بسیاری وجود دارد؛ اما به دلیل کمبود وقت از تشریح آنها صرف نظر می­کنم. البته در انتهای مطلب برای مطالعه بیشتر منابعی را که مورد استفاده قرار داده­ام ذکر خواهم کرد.

تا بدین جا نحوه استفاده از LINQ برای بازیابی اطلاعات از اشیاء درون حافظه مورد بررسی قرار گرفت. در ادامه نگاهی بر نحوه ارتباط این تکنولوژی با پایگاه داده SQL Server خواهیم انداخت

 ادامه دارد....

موفق باشید.

 

 

Subscribe
ارسال در تاريخ جمعه بیست و چهارم آبان 1387 توسط سعيد
قالب وبلاگ

CopyRight Of Unicomp.ir