تبليغاتX
پویش

پویش

آموزش دات نت net. (سی شارپ دات نتC#.NET )

دینگ دینگ!

 

سلام.  اسباب کشی می کنیم:

http://csharpcorner.ir/

 

+ نوشته شده در  یکشنبه دهم آبان 1388ساعت 11:55  توسط تبسم  | 

تری ویو در پایگاه داده(Save and Load TreeView in DB)-معرفی نوع دادهHIERARCHYID در Sql Server 2008

 

سلام دوستان.                                                                        (بخش اول)

تمرین تری ویو (TreeView) که یادتونه؟ خوب ما توی اون تمرین به کاربرمون اجازه می دادیم که یه نود به نودهای تری ویو اضافه کنه، براش اسم و توضیحات ثبت کنه و جاش رو هم خودش انتخاب کنه. اما وقتی کاربر پنجره رو می بست چون ما اطلاعاتش رو توی یک پایگاه داده ثبت نکرده بودیم، اطلاعاتش از دست می رفت یا اصطلاحا می پرید. حالا باید براش یه پایگاه داده تعریف کنیم تا بتونه اطلاعات رو اونجا سیو کنه و بعد هم بتونه اطلاعات ذخیره شدش رو لود کنه. فعلا با ظاهر برنامه که شاید براش دو تا دکمه ی Save  و Load بذاریم کاری نداریم. برای اینکه برنامه ی قبلیمون رو که از سیستم لایه ای توش استفاده کردیم، کامل کنیم نیاز به  لایه ی DAL داریم . حتما یادتون مونده که در لایه ی DAL برنامه ی ما با پایگاه داده ارتباط برقرار می کرد و این لایه مثل یه پل بین برنامه و پایگاه داده عمل می کرد. (دلایلش رو رجوع کنید به پست های قبلی- دفترچه تلفن با معماری سه لایه).

حالا می خوام یه کم راجع به پایگاه داده ی مربوط به این مثال صحبت کنیم. توی این مثال همونطور که قبلا هم توضیح دادم ما یه جور نمایش درختی و سلسله مراتبی داریم. یعنی چی؟ یعنی نود ها به هم ارتباط دارن. یک پدر با چندین بچه که هر کدوم از اون بچه ها خودشون می تونن پدر باشن برای بچه های دیگه. پس چیزی که مهمه اینه که ما جای هر نود رو نگه داریم و بتونیم پیدا کنیم. اینکه هر نود پدرش مثلا کی بوده.

روش های مختلفی هست. می شه از انواع داده XML برای نگه داشتن این اطلاعات سلسله مراتبی استفاده کرد، می شه هم یه سری جدول (Table) توی مثلا SQL یا برنامه های مشابه ش داشت و با یه سری ارتباط که بین جداول هست (Relational Table) و یه سری دستورات Self Join و ... جای نودها رو نگه داشت و اطلاعات رو ذخیره کرد که گاهی پیچیده می شه.

 Hierarchyid  جدید تعریف شده به نام   (Data Type)یک نوع دادهSQL SERVER 2008 اما  خوشبختانه در که یک امکان بسیار عالی و راحتتر برای نگهداری و کدنویسیه داده های سلسله مراتبی هست. این نوع داده یک دیتا تایپ محلی مثل انواع داده ای DATE  و Time  نیست ،یک نوع داده ایه که بهش می گن:   System - Defined UDT(User Data Type) .یعنی شما نمی تونین نامش رو تغییر بدین یا پاکش کنید و در واقع انواعی هستند که کدشون برای راحتی کاربر نوشته می شن یا کاربر می تونه خودش تعریفش کنه .... این نوع داده در  Microsoft.SqlServer.Types.dll ذخیره شده که در فضای نام (Name Space) ِ Microsoft.SqlServer.Types ساخته شده.

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

با یه مثال مشابه برنامه ای که می خواهیم برای تری ویو (Save in treeview and Load from treeview) بنویسم تا حدودی توی این پست براتون توضیح می دم چه جوری کار می کنه.توی پست بعدی یه کتاب معرفی می کنم که می تونه بیشتر کمک کنه، احتمالا.

توجه:برای استفاده از این نوع داده شما حتما باید از Sql Server 2008 استفاده کنین. برای اینکه پست بعدی رو با هم پیش بریم یا دی وی دی ش رو از بیرون تهیه کنین و نصب کنید یا از این آدرس که در ادامه پست می ذارم نسخه ی Express ش رو فعلا دانلود کنید. ممکنه نصب Sql Server 2008 یه کمی زمان بر باشه و یه سری کارها و نصب مقدمات ضروری نیاز داشته باشه مثل نصب Visual Studio Service Pack1 که اونم می تونین از سایت مایکروسافت دانلود کنین. اگر به مشکلی در نصب برنامه (ترجیحا: Microsoft Sql Server 2008, Developer Edition + Service Pack1 رو تهیه کنین)برخوردین بپرسین چون خودم  یه چیزایش رو تجربه کردم.

 

اینم آدرس لینک برای دانلود: http://www.microsoft.com/express/sql/download/  از سمت راست دومی ، اونی که 224 مگا بایته رو دانلود کنین فعلا.

 

و اما مثال: (البته فایلش رو هم براتون می ذارم انتهای پست.)

به ترتیب کارهایی که می گم رو با من انجام بدین، ضمن اینکه به این شکل (گیر ندین دیگه به جزئیات شکل :دی خواستم مفهوم باشه!) هم دقت کنین:

1.توی DataBase تون یه راست کلیک کنین و یه دیتابیس جدید بسازین. (New DataBase…)  و اسمش رو هر چی دوست دارین بذارین. من گذاشتم : HierarchyIDType

2. یه صفحه New Query باز کنین توی SQL Server 2008 تون.

3. این کد رو توش بنویسین، بعد توی همین دیتابیسی که ساختین F5 یا دکمه Execute رو بزنین .جدولش ساخته می شه، برین ستون هاش رو ببینین.ستون node که کلید اصلی ماست از جنس هایرآیکی تعریف شده و ستون بعدی level که اگر دقت کنین جلوش نوشته شده (Computed) در واقع یه ستون محاسبه شده ست. این یعنی چی؟ یعنی با اون تابع پیش فرض (GetLevel )که برای این نوع داده تعریف شده(که بهش   می گن: deterministic function)، سطح نود ِ node رو حساب می کنه و برمیگردونه. یعنی چی حالا سطح نود رو برمیگردونه؟ یعنی مثلا توی مثال ما نود موجودات  سطح ش صفره، بعد جانداران و بی جان ها سطحشون 1 و همین طور سطح ها اضافه می شه.حله؟! این برای اینکه فرزندهای پدرها رو رد یابی کنیم به دردمون می خوره.

Create Table Mujudats

(

node hierarchyid PRIMARY KEY CLUSTERED,

level AS node.GetLevel() PERSISTED,

Mujud_id int Unique,

Mujud_name Nvarchar(30) Not null

 

)

4. حالا برای اینکه یه اجرا ببین که چه جوریه توی یه صفحه ی دیگه ی New query کد زیر رو بنویسن و توی همین دیتابیس اجراش کنین.

--insert into Mujudats 's table

INSERT INTO [dbo].Mujudats VALUES (HierarchyID :: GetRoot(),5000,'Mujudat')

با این کد نود ریشه مون رو با نام Mujudat که Mujud_id ش برابر با 5000  ه و mujud_name ش می شه همون mujudat رو اضافه می کنیم به تیبلمون که level اینجا برابر با صفر خواهد بود. چون ما از یه  deterministic functionدیگه به نام  GetRoot() استفاده کردیم. حالا اگر برین روی جدولتون یه راست کلیک کنین و ردیف های (Row)جدولتون رو ببینین یه همچین شکلی رو می بینین:

شکل مربوط به افزوده شدن نود ریشه به جدول

5.حالا می خواییم بچه های این پدر گرامی رو بهش اضافه کنیم برای این کار از یه  deterministic functionدیگه به نام GetDescendants() استفاده می کنیم. خوب مجددا یه New Query باز کنین و کد زیر رو بنویسین و اجرا کنین:

-- First we should declare some variables

 

Declare @ManagerNode hierarchyid

Declare @Level hierarchyid

 

---

Select @ManagerNode=node from Mujudats where mujud_id = 5000

--GetDescendant will now return the first child "/1"

--since there are no other children defined

 

Insert Into Mujudats values (@ManagerNode.GetDescendant(null,null),5001,'jundaran')

با اجرای این کد فرزند راست موجودات بهش اضافه می شه. می تونین توی سطرها هم ببینین که اضافه شده. شکل زیر:

شکل افزوده شدن فرزند راست به جدول

6. حالا اگر بخواهیم فرزند چپ رو به Mujudat  اضافه کنیم باید کد زیر رو توی یه New Query  بنویسین و اجرا کنین. توی کد یه توضیحاتی رو کامنت کردم بهش دقت کنین:

 

------now: if we are passing (jundaran,Null) to GetDesecndant() this

------will give us the node value of next child after jundaran

------but if we are passing (Null,Jundaran), this function would return

------the node value of the child previous to Jundaran

------actually we insert a child before jundaran:

 

Declare @managerNode hierarchyid

Declare @Level hierarchyid

 

select @managerNode=node from Mujudats where Mujud_id=5000

Select @Level=node from Mujudats where Mujud_id =5001

 

insert into Mujudats Values(@managerNode.GetDescendant(@Level,null),5002,'Bijanha)')

دیگه از کدش مشخصه دیگه ببینین می گه برو به ریشه (@ManagerNode که آی دی ریشه رو بهش دادیم) در سطح @Level که بهش سطح فرزند قبلی رو دادیم که سطحش 1 بود، فرزند جدید رو با آی دی 5002 و نام  Bijanha اضافه کن. حله؟!

دوباره برین ردیف اضافه شده به جدول رو ببینین. می بینین سطح ها یکی شدن. نحوه ی نمایش رو هم دقت کنین:

شکل افزوده شدن فرزند چپ به جدول

6. قبل از اینکه بریم سراغ فرزندهای بعدی کد زیر رو توی یه صفحه ی جدید بنویسین و اجرا کنین: این کد اطلاعات ستون هایرآکی آی دی  مون (hierarchyid)رو به صورت رشته و باینری نشون می ده:

select node.ToString() AS NodeAsString,

node as NodeAsBinary,

node.GetLevel() AS Level,

Mujud_id,

Mujud_name

from Mujudats

به صورت شکل زیر می تونین اجراش رو ببینین:

شکل جدول در تبدیل به رشته و ...

 7. و اما بقیه فرزندان پست بعدی ان شاا...

فایل کدهای دیتابیس راست کلیک بعد Save Target as... لطفا. :-)

تا اینجاش رو کار کنین اگر مشکلی بود در خدمتم.

 

 

+ نوشته شده در  پنجشنبه سی ام مهر 1388ساعت 0:28  توسط تبسم  | 

Dimain , Host , site(چه جوری دامنه و هاست و سایت خودمون رو داشته باشیم؟!)

 

سلام دوستان.

از اونجاییکه قراره از اینجا اسباب کشی کنیم و بریم به سایت خودمون (متعاقبا جزئیات اعلام می شه D:) ، یه مقدار اینجا راجع به داشتن سایت و دامنه و باقی ماجراش مثل مدیریت سایت و موتورش و اینا صحبت می کنیم. فکر کنم شماره گذاری کنیم بهتر باشه، اول از یه سری تعاریف شروع می کنیم بعد می ریم سراغ اینکه چی کار کنیم. این پست برای آشنایی اونهای هست که تا حالا از این کارها نکردن و کلا سعی کردم که خیلی ساده توضیح بدم:

  1. دامنه (Domain) چیه؟

وقتی شما می خوایین وارد سایتی بشین باید آدرسش رو توی نوار آدرس  (Address Bar) اکسپلوررتون وارد کنین تا شما رو به اون صفحه، به اون فضا هدایت کنه، خوب اون آدرس همون دامنه ی شماست، شما که نه، اونی که دارین به سایتش وارد می شین :دی

ما دامنه های مختلفی داریم با پسوندهای ir، com،net، org و و ... که هر کدووم در محدوده های خاصی استفاده می شن مثلا org بیشتر برای سایت های سازمانی استفاده می شه و com برای سایت های تجاری و الی آخر. ولی یه اصل کلی نیست یعنی شما میتونین وبلاگ شخصیتون رو روی پسوند org راه بندازین مثلا. یه سری ها هم مخصوص شرکتها هستن و غیر شرکت نمیتونن از اونها استفاده کنن مثلا .co.ir

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

  1. هاست (Host) چیه؟

حالا شما آدرس دارین، نیاز به چی دارین؟ یه فضا روی اینترنت که اطلاعاتتون رو اونجا بذارین، به این فضا، یا در واقع همون محیطی که نیاز دارین اطلاعاتتون رو روش قرار بدین و بازدید کننده ها با تایپ آدرس شما بهش وارد شن می گن هاست(host) یا همون میزبان که میزبانی اطلاعات شما رو می کنه.

  1. چه جوری دامنه (domain)  برای خودمون ثبت کنیم؟

سایت هایی هستند که این مار رو انجام می دن. شما با یه سرچ ساده برای ثبت دمین این سایت ها رو پیدا می کنین. برای مثال یه سایت که پسوند های ir رو ثبت می کنه اینه :  http://www.nic.ir/ (ایرنیک،مرکز ثبت دامنه .ir)

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

  1. چه جوری هاست (Host) بخریم؟

برای خرید هاست هم باید دنبال سایت ها و شرکت هایی بگردین که این کار رو انجام می دن. من هم مثل شما تبلیغات زیادی در مورد هاست مجانی شنیدم. اما نکته ای باید خیلی بهش توجه کنین شرکتیه که ازش فضا رو می خرین. چون چیزی که خیلی مهمه امنیت و حفظ اطلاعاتتونه. نکات دیگه ای مثل نوع سایت هم مهمه، مثلا اینکه اگر کارهای دات نتی انجام می دین یا موتور سایتتون با دات نت نوشته شده حتما باید هاستتون (در واقع کنترل پنل هاستتون) ازش پشتیبانی کنه و البته کنترل پنل ویندوزی باشه. اکثر سایت های پولی کنترل پنل دارن و از FTP پشتیبانی می کنن.

(ftp چیه؟ خوب این ftp (File Transfer Protocol  )  ما یه پروتکله،که برای انتقال فایلها بین کامپیوترها استفاده می شه. پروتکل در واقع یه سری قانون یونیکه. )

پس خرید هاست بستگی به نیاز شما داره. حالا شمای نوعی شاید می خوای زیاد وارد بحث کامپیوتری و فنیش نشی،واسه همین نگران نباشین،شما چیزی که احتیاج دارین رو برای مدیر هاست توضیح بدین، بر اساس امکانات هاستشون راهنماییتون می کنن حتی هستند هاست هایی که مدیریت ساییتون رو هم قبول کنن.

من خودم از هاست این شرکت استفاده می کنم : http://ivs.ir/ و راضیم و هاست مطمئنیه. اینم آدرس مستقیم خرید هاستش: http://www.parnianet.ir/  کنترل پنلش از ورژن های  Asp.net و  PHPو SQL Server  پشتیبانی می کنه و این برای سایتی که طراحی می کنین یا استفاده می کنین خیلی مهمه.

بعد از خرید هاست باید ببینین که آدرس سرورهای دامنه اون هاست چیه. بعد باید برین توی کنترل پنل دامینتون (این یه کنترل پنل دیگست، واسه سایت شما حداقل 2 تا پنل کنترل دارین، یکی برای دامنه یکی برای هاست – ممکنه برای خود سایت هم باتوجه به سایتی که راه میندازین پنل کنترل داشته باشین) و اون آدرس دامنه رو ست کنین. این یعنی اینکه هر وقت هر کس این اسم دامنه رو بالای بروزرش زد سرورهای اینترنتی اون رو هدایت میکنن به سرور هاستی که خریدین و اطلاعات اون سایت با اون نام دامنه رو از اون آدرسی که به اون دامنه الحاق کردین میگیره.

  1. حالا شما دامنه دارین، هاست هم دارین، چه جوری می تونین یه سایت داشته باشین؟

حالا شما می تونین ساییتون رو روی هاستی که دامنه از طریق آدرسی به نام DNS که از هاست بهش می دین بهش متصل شده،ملحق شدن، قرار بدین. اصطلاحا می کن بهش آپلود کردن سایت روی هاست.یعنی شما صفحه های سایت یا وبلاگتون رو روی فضای شخصیتون قرار می دین . در واقع شما موتور سایتتون رو روی هاست می ذارین.

  1. موتور سایت دیگه چیه؟

براتون با مثال می گم. مثلا وردپرس (wordpress) یه موتوره، که از صفحه های مختلف داره، قالب داره، امکاناتی اکثر سایتها دارن داره.( http://wordpress.com )

یا مثلا بلاگ اینجین دات نت (BlogEngine.net) یه موتور کد بازه (open source) و با ASP.Net نوشته شده و اطلاعات رو هم توی فایل های XML ذخیره می کنه نه توی دیتا بیس.

( http://www.dotnetblogengine.net )

من خودم اینجا رو پیشنهاد می کنم، چون کدهاش رو در اختیارتون می ذاره و با زبان سی شارپ دات نت نوشته شده و شما می تونین هر جاشو خواستین خودتون تغییر بدین، یا کدهای جدید بنویسین بهش اضافه کنین.

ورد پرس نسخه ی فارسی شده ش هست. بلاگ اینجین هم توی تنظیماتش امکان فارسی کردن گذاشته و  راحت می تونین چیزای اضافیش رو بردارین یا تغییر بدین. اما یک قسمت هاییش رو هم می تونین با تغییر دادن کد و یا نوشتن کد تغییر بدین.خودتون می تونین قالبش رو دستکاری کنین و و و. باید دانلوش کنین، با ویژوالاستودیو بازش کنین و با یه f5 اجراش کنین روی کامپیوتر خودتون و بعد ببینین چی به چیه.

مثلا این سایت از بلاگ اینجین استفاده می کنه: http://www.irinfotech.com/blog

من این کدها رو پیشنهاد می کنم.(آخرین ورژنش رو دانلود کنین)

 

·         در نهایت کدهاش رو (کل پوشه) رو کپی می کنین روی هاستتون و با آدرس دامنه تون وارد سایت می شین.

  1. چه جوری کپی یا همون آپلود کنیم؟

آپلود کردن که می دونین برعکس دانلود کردنه. شما باید پوشه ی کدهای سایتتون رو توی پوشه ی wwwroot هاست قرار بدین. همین. اما چه جوری؟ من یه نرم افزار معرفی می کنم . البته اینم بسته به هاستتون می تونین از شرکتش راهنمایی بگیرین.

1.       اولا باید برین توی کنترل پنل هاستتون (وقتی دامنه رو ثبت می کنین و هاست رو می خرین آدرس کنترل پنل و نام کاربری و پسورد بهتون ایمیل می شه از از اون طریق می تونین به کنترل پنل وارد شین)، و تنظیمات مربوط به ورژن دات نت رو درست کنین و می ذارین رو آخرین ورژن و یا حداقل هاست باید ورژن 2 رو برای ورژن جدید بلاگ اینجین پشتیبانی کنه.

2.       یه نام کاربری Ftp می سازین توی کنترل پنل هاستتون.

3.       نرم افزار   FileZilla Client رو دانلود و نصب کنین که برای آپلود و انتقال فایلهای ftp روی هاست استفاده می شه.  از این آدرس: http://filezilla-project.org/download.php?type=client

4.       بعد این برید منوی فایل،گزینه ی site manager و بعد new site و توی General tab آدرس هاست رو بنویسن(ftp.DomainName)، و logontype=normal و نام کاربری و پسورد رو هم همونی بذارین که برای ftp توی کنترل پنل ساختین و بعد Connect.

5.       حالا شما به پوشه های هاستتون برای آپلود و کپی دسترسی دارین. کل پوشه ی موتور سایتتون رو (مثلا بلاگ اینجین دات نت رو)کپی کنین توی wwwroot.

6.       حالا برین توی یه اکسپلورری آدرس سایتتون رو تایپ کنین. مبارکه.

 

پ.ن: من یه آدرس های پیش فرضی بهتون دادم.خودم از اونا استفاده کردم.امتحان شده ست. در مورد blogengien.net هم همینطور. تغییرات هم توش دادم. ان شاا.. در پست های بعدی مخصوصا اگر زودتر جمع بندی کنیم و بریم سراغ ASP.Net و طراحی وب سایت فارسی کردن یه بخش هاییش رو که توی تنظیماتِ خودش نمی شه بررسی می کنیم.

اگر جایی به مشکل برخوردین حتما بپرسین. شاید یه سری جزئیات از دید من مخفی مونده باشه.

ممنونم. موفق باشین.

 

 

 

+ نوشته شده در  دوشنبه سی ام شهریور 1388ساعت 0:30  توسط تبسم  | 

تمرین2 به همراه توضیح سوال، پاسخ و توضیح پاسخ و فایل دانلود برنامه (طراحی ساختارTree View)

 

سلام و سلامتی.

توی این پست یه تمرین رو به همراه پاسخش بررسی می کنیم. این تمرین یه جورایی تمرین شی گرایی ه. هر جاشو احساس کردین واضح نیست بپرسید. این پست طولانیه پس از الان فهرستشو می گم: اول خود سوال و بعد بررسی و توضیح خودِ سوال و بعد از اینا می رسیم به پاسخ و توضیحات مربوط به پاسخ و یه سری نکات و البته کد نمونه ی برنامه برای دانلود.

دینگ دینگ: لطفا به کدها نگاه کنین و تطبیق بدین تا توضیحات رو بهتر متوجه بشین. چون با مثال و دیدن کدها بهتر مفاهیم و توضیحاتِ به ظاهر پیچ در پیچ!! رو درک می کنین. پیشنهادم اینه که اول برنامه رو که توی ویژوال استودیو 2008 نوشته شده دانلود کنین، اجراش رو ببینین، کدهاشو نگاه کنین بعدش بیاین توضیحات رو بخونین.

حالا به قول خارجی ها (Let ‘s go)...   

سوال:

  1. یک ساختار داده ای طراحی کنید که بتوان درختواره دسته بندی طبیعی را در خود جای دهد.
    یعنی برای مثال کل موجودات به جاندار و بیجان تقسیم میشن
    بعد جانداران به آغازیان و پستانداران و آبزیان و خزندگان ........ تقسیم میشن
    خود این جانداران به دسته بندیهای دیگه تقسیم میشن
    و هر کدوم یه سری اطلاعات دارن .
    حالا این دسته بندی رو براش یه برنامه ویندوزی بنویسین با کمک تری ویو

    که مثلا روی جانداران که کلیک کردیم یه توضیح روی فرم بده
    بعد روی زیر مجموعه هاش که کلیک کردیم هم همینطور
  2. برای سوال بالا یه رابط کاربری کامل بنویسین، یعنی کاربر بتونه خودش یه شاخه جدید به همراه توضیح اضافه کنه.

MyTreeView Code دانلود برنامه.

باقیش توی ادامه ی مطلب...

 


ادامه مطلب
+ نوشته شده در  چهارشنبه بیست و یکم مرداد 1388ساعت 12:9  توسط تبسم  | 

(تمرین)Practise

سلام دوستان.

یه مدت بین کارامون وقفه افتاد اما خوب استراحت دیگه تموم شد. قبل از اینکه ادامه ی پروژه ی CRM رو دنبال کنیم، 2 تا سوال می ذارم اینجا که خواهش می کنم جوابش رو برای من بفرستین.

چند پست قبلتر یه ایبوک معرفی کرده بودم.حالا در راستای همون ایبوک شما با مطالعه ی فصل 3 و 4 و یه راهنمایی دیگه اینکه از متد های کلاس String می تونین استفاده کنین، جوابو پیدا کنین.

1-      کلاسی بنویسد که در هنگام ایجاد وحله ای از آن یک آدرس مانند:

E:\My documents\PDF Files\My Folders\Available.pdf

را بگیرد و

  ۱-   نام درایو (E)

۲-     نام فولدر بالا سری (My Folders)

۳-     آدرس فایل بدون نام فایل (E:\My documents\PDF Files\My Folders\)

4-     نوع فرمت فایل (pdf)

رو بدهد.

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

2-      کلاسی بنویسید که یک رشته سی شارپی داخل کد را گرفته به رشته خروجی تبدیل کند

مثال رشته ورودی:              

“ Database Name=\”as.mdf\”; Database Address=\” c:\\temp\\as.mdf\””

رشته خروجی:

Database Name=”as.mdf” ; Database Address=” c: \temp\as.mdf”



پ.ن: جوابهاتون رو به من ایمیل کنین.بررسی می کنم و اگه جوابهاش رو خواستین هماهنگ می کنیم. ممنون.

+ نوشته شده در  چهارشنبه سی و یکم تیر 1388ساعت 11:19  توسط تبسم  | 

سیستم ارتباط با مشتری (CRM) ، بخش دوم، دیتا بیس

 

سلام دوستان.

قرار بود دیتابیس مربوط به یه شرکت تولیدی رو برای نگهداری اطلاعات مشتریاش طراحی کنیم. (تصویر دیتابیس در پایان همین پست پیوست شده)

به طور کلی و برای اینکه خیلی پیچیده نشه و وارد خیلی جزئیات نشیم و چون صرفا می خواییم اطلاعات کلی در مورد مشتریامون و اینکه چه کالاهایی رو با چه قیمتهایی از ما خریده، چه تعداد و در چه تاریخی و از این قبیل چیزها رو نگه داریم، 3 تا Table  در نظر می گیریم.

اول  Table ی برای ثبت اطلاعات مربوط به مشتری. خوب، به نظر شما چه فیلدهایی رو مهمه که نگه داریم؟! درسته همونطور که دارین توی ذهنتون می گین، ما اسم، آدرس، شماره تلفن برامون مهمه. پس یک Table  داریم با نام مثلا : Table_customerINFO .

و دوم Table ی که یک سری اطلاعات کلی کالامون رو برامون نگه داره تا بفهمیم مشتری دقیقا چی خریده از ما. Table ی که مثلا نام و شماره ی سریال تولید کالا رو برامون نگه داره. پس Table بعدیمون می شه مثلا: Table_goodsINFO .

و در نهایت به یک Table ی نیاز داریم که مثل برگه ی قراردادمون می مونه و در حقیقت می شه ارتباط بین کالا و مشتری و برای ما اطلاعات خرید رو نگه می داره مثل تاریخ خرید،قیمتی که به مشتری داده شده، میزان پولی که مشتری پرداخته، تعداد کالایی که خریده. و البته باید دقت کنید که توی این جدول ما باید کلیدهای خارجی از جداول دیگه داشته باشیم تا بتونیم ارتباط بین جداول ایجاد کنیم و اطلاعات دو جدول دیگه رو از طریق این برگه ی به اصطلاح قرارداد استخراج کنیم. پس Table سوم می شه مثلا: Table_buyINFO

 

دقت کنین که اگر می خوایید یک پروژه با جزئیات بیشتری بنویسین در محدوده ی CRM شما می تونین جدول های دیگه ای هم داشته باشین، می تونین جزئیات بیشتری برای مشتری در نظر بگیرین مثل تاریخ تولدش و ... و برای نوع پرداخت ها، که نقدی هست،یا قسطی و چک... و حتی جزئیات بیشتری برای کالا.می تونین اطلاعات بازاریابها رو حتی در نظر بگیرید و الی آخر...

 

دینگ دینگ توجه:

  1. برای نوع داده ی مربوط به ستون قیمتها از Money استفاده نکردم چون با مقادیر ایرانی مشکل داره بنابراین می تونین از float یا  decimal استفاده کنید.
  2. برای تاریخ ها از datetime استفاده می کنیم اما چون این نوع داده تاریخ رو به صورت میلادی بر می گردونه بعدا توی برنامه مون،برای لایه ی نمایش باید متدی بنویسیم که تبدیل به شمسی ش رو انجام بده.
  3. برای id ها از نوع داده ی uniqueidentifier استفاده می کنیم. حالا می رسیم به اینکه چرا و این چه جور نوع داده ایه:

Unique identifier   اگه اینجوری جدا بنویسم از رو معنیش به طور کلی می فهمین چه نوع داده ای هست. یونیک، یک  شناسه ی یونیک، یکتا، تک. در واقع uniqueidentifier یک نوع داده ایه که مقادیر 16 بایتی باینری(0و 1) ی رو ذخیره می کنه که بعنوان یک globally unique identifiers (GUIDs)  یا در واقع مثل اون ازش در محیط برنامه نویسی استفاده می شه.

حالا این GUID  چیه؟ یک عدد 16 بایتی یونیک هست. در واقع هیچ دو کامپیوتری در دنیا وجود ندارن که GUID های مثل هم تولید کنند دقیقا مثل  uniqueidentifier ها . بنابراین وقتایی که می خواییم یکی بودن مثلا یک نام رو توی پروژه ها یا سایت هامون چک کنیم، این GUID برای پیگیری کمکمون می کنه،چون برای هر نامی یک شماره یکتا تخصیص داده می شه که از طریق اون قابل پیگیریه و این در صورتی که نامهای مشابه داشته باشیم خیلی مفید خواهد بود. در حقیقت یه جور کلید(Key) هستند و در واقع توی دیتابیس کلید اصلی هستند.

برگردیم به Uniqueidentifier ها و نکات مربوط بهش:

1.       توی Table در نظر بگیرید وقتی یک ستون از این نوع داده Uniqueidentifier  استفاده می کنه حتی اگه بعضی داده های اضافه شده در Table مشابه باشن با هم قاطی نمی شن چون هر سطر شناسه ی مخصوص به خودش رو داره.

2.       Uniqueidentifier ها رو می شه دو جور نمایش داد: رشته هایی از کاراکتر و یا باینری

Character string format: '6F9619FF-8B86-D011-B42D-00C04FC964FF'

Binary format: 0xff19966f868b11d0b42d00c04fc964f

3.       برای تولید این عدد یونیک از شماره های یونیک کارت شبکه (مثل شماره ی Mac  یا Ip) و همچنین ساعت CPU ی کامپیوتر استفاده می شه.

4.       از دو راه متغیرهای Uniqueidentifier مقدار دهی می شن:

-          اول از طریق تابع (Function) پیش فرضی که خود SQL Server داره به نام  NEWID .

DECLARE @myid uniqueidentifier

()SET @myid = NEWID

(PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid

-          و بعد از طریق تبدیل از حالت رشته هایی از کاراکتر به باینری. رشته هایی که مشابه این هستند:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

هر x نماد یک رقم هگزیمال (شانزده شانزدهی) بین 0 تا 9 و کاراکترهای از a تا f هستند.

5.       مقایسه هایی مثل (=, <>, <, >, <=, >=) و Null و غیرNull بودن رو می شه رو متغییرهای Uniqueidentifier انجام داد اما عملیات دیگه ی ریاضی رو نمی شه روشون اعمال کرد.

6.        یه سری پراپرتی های IDENTITY داریم که این متغیرهای Uniqueidentifier باهاش فرق دارن. اون پراپرتی ها با اضافه شدن هر سطر مقدارش اتوماتیک عوض می شه مثلا زیاد می شه اما در مورد متغیرهای Uniqueidentifier اینطوری نیست و با اضافه شدن هر سطر به جدولمون باید یه دونه جدیدش ایجاد بشه. به همین دلیله که ما برای کلیدهای اصلی مون توی این Table ها از این نوع داده استفاده کردیم.

 

 تصویر دیتا بیس CRM

پ.ن: اگه راجع چیزهایی که گفتم و یا بقیه Data Type ها(انواع داده) سوالی دارین، خوشحال می شم بپرسین.

 

+ نوشته شده در  پنجشنبه هفتم خرداد 1388ساعت 14:11  توسط تبسم  | 

سیستم ارتباط با مشتری (CRM)

 

سلام دوستان.

دیگه وقتشه یه تمرین جدید رو با هم شروع کنیم. ظاهرا هم توی تمرین قبلی مشکلی ندارید الحمدالله... این بار بیاین از اول با هم شروع کنیم و با هم پیش بریم.

پروژه ی جدید،ادامه ی همون دفترچه ی تلفن هست با این تفاوت که می خواییم پروژه ی قبلی رو تبدیل کنیم به یه پروژه ی ارتباط با مشتری. یعنی چی؟ یعنی می خواییم برنامه ای برای یک مثلا شرکت تولیدی بنویسیم، فرضا تولید مواد بهداشتی. و می خواییم برای فروش محصولاتمون و ارتباط با مشتری یه برنامه داشته باشیم و اطلاعاتی نظیر اینکه مشتری چه چیزایی از ما خریده، چه مقدار و در چه زمانهایی به ما پرداخت کرده، چه جوری پرداخت کرده (نقدی، قسطی ...) و اطلاعات مربوط به اسم و آدرس مشتریمونو ثبت کنیم.

به این جور سیستم ها می گن مدیریت ارتباط با مشتری (CRM: Customers Relations Management) می گن.

 حالا اینجور سیستم ها چی هستن و چه مزایایی دارن؟

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

به هر حال این مبحث برای خودش تخصصیه اما به طور خلاصه مفهومش می شه اینی که گفتم. حالا ما می خواییم به ادامه ی پروژه ی قبلیمون اینو اضافه کنیم، در واقع تکمیل و تبدیلش کنیم به یه سیستم ارتباط با مشتری فرضیمون. برای این کار اول باید پایگاه داده مون رو طراحی کنیم.

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

مثلا ما یه مشتری داریم ، یه کالا داریم. و ... البته. مشتری یه سری مشخصات داره مثل اسم و آدرس و چیزی که خریده و ... کالا هم همینطور اسمش، نوعش، تاریخ تولیدش و ... ارتباط هم مثلا مشتری یه شامپو خریده،خریدن.

 

منتظرم.ممنون.

 

+ نوشته شده در  سه شنبه پانزدهم اردیبهشت 1388ساعت 23:59  توسط تبسم  | 

معرفی EBOOK

 

سلام . توی این پست می خوام یک EBook بهتون معرفی کنم و فایل دانلودش رو هم می ذارم. این کتاب برای سطح خاصی از افراد نیست، یعنی چه شمایی که تازه اول راهی و دوست داری یاد بگیری و چه اونایی که زمان زیادیه دارن کار می کنن می تونن ازش بهره ببرن.چون این کتاب از پایه شروع کرده چه در مورد برنامه نویسی شی گرا و چه کدنویسی با دات نت (.net)  و استفاده از محیط ویژوال IDE .

اسم کتاب:      2008 #Beginning C

(From Novice to Professional)

مولف: Christian Gross Christian Gross

و این کتاب توسط APress منتشر شده.

نویسنده در این ebook ، از ابتدا و ابتدا، از مفاهیم پایه ای گرفته تا ویژگی های C# حتی ویژگی های جدیدی که به سی شارپ دات نت 2008 اضافه شده و همین طور نحوه ی دسترسی به نرم افزار مورد نیاز برای اجرای کدها رو (که همون نسخه ی  Express C#هست) ، گام به گام پیش رفته و همراه با مثال های ملموس و تمرین ها و تصویرها ، این کتاب رو پیش برده. به خاطر همینه که می گم این کتاب حتی به درد شمای نوعی می خوره که با برنامه نویسی شی گرا آشنا نیستی اما دوست داری یاد بگیری.

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

 

از این نویسنده کتابهای زیادی منتشر شده من جمله نسخه ی beginning VB 2008 ،  

  How to code .net ،

Foundations of Object-Oriented Programming Using .NET 2.0 Patterns presents،

 Ajax and REST Recipes: A Problem-Solution Approach،

Ajax Patterns and Best Practices،

A Programmer's Introduction to Windows DNA و...

 

دانلود کتاب از اینجا :  2008 #Beginning C

امیدوارم ازش نهایت استفاده رو ببرین.

 

+ نوشته شده در  پنجشنبه سوم اردیبهشت 1388ساعت 19:3  توسط تبسم  | 

دفترچه ی تلفن (نسخه جدید.)، بخش چهارم(بخش آخر)،لایه ی نمایش...

 

سلام دوستان.

یه برنامه ی کودک بود می گفت: جلسه ی امروز ما یه بار دیگه رسمیه/ شاکی کیه و متهم این وسط کیه؟!   و ... خوب ما هم جلسه مونو شروع می کنیم و جلسه ی ما یه بار دیگه رسمیه. توی پست قبل رسیدیم تا متد Retrieve . اول این متد رو بررسی می کنیم بعدش می ریم سراغ لایه ی نمایش.

متد Retrieve :

  1. این متد چی کار می کنه؟

همونطور که از معنی این کلمه مشخصه از این متد برای بازیابی داده ها استفاده می کنیم. اما کجا؟! یادتونه که یه متد ویرایش داشتیم، خوب این یعنی ما قراره یه دکمه برای ویرایش اطلاعاتمون داشته باشیم و برای اینکه کاربر بخواد داده های خاصی رو تغییر بده باید این داده ها و در واقع اون سطری از جدول که مد نظر کاربر هست، بازیابی بشه و در تکست باکس (TextBox)هایی که داریم نمایش داده بشن. این متد Retrieve این کارو برامون انجام می ده و داده های مورد نظر رو به تکست باکس ها منتقل می کنه.

  1. چه جوری می فهمه کدوم سطر رو کاربر می خواد ویرایش کنه که بیارتش؟

خوب، اگه دقت کنید می بینین این متد یه ورودی داره از نوع اینتیجر (Integer) - همون int در سی شارپ مون (  C#.net) البته- به نام id که بعدا توی لایه نمایش می بینین که این id شماره ی همون سطریه که کاربر روش کلیک کرده تا ویرایشش کنه، بعد این id می ره توی استورد پروسیجر (Stored procdure) ی که به همین نام توی دیتا بیس داریم و اطلاعات رو برمیگردونه.

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

  1. داده ها رو چه جوری از توی دیتابیس برمی گردونه؟

با()ExecuteReader داده ها رو می خونه و توی یه جدول لودشون می کنه. این جدول یه سطر بیشتر نداره چرا؟! معلومه دیگه چون کاربر یه سطرو انتخاب می کنه که ویرایش کنه. درواقع پروسیجر ما سطری از جدول رو که idش با id مورد نظر ما یکی بوده برگردونده. حالا ما باید اینا رو برگردونیم به لایه ی نمایش. یک شی از کلاس BLL یا همون کلاس PhoneBookEntry مون، نیو (New) می کنیم و ستونهای این سطر جدولمون رو به لایه ی نمایش می فرستیم. (دینگ دینگ: حواستون هست دیگه چون کلاس PhoneBookEntry رو استاتیک (Static) تعریف نکردیم پس اینجا باید شی نیو کنیم.)

سوال : این Convert ها جریانش چیه؟

اگه یادتون باشه توی متدهای دیگه که ما مثلا دیتاها رو به دیتابیس اضافه می کردیم از SqlDbType استفاده می کردیم.در واقع داده هامون رو به اون جنسی که دیتا بیس نیاز داشت و براش تعریف کرده بودیم، در می آوردیم.

اینجا هم همونه.منتها داریم از دیتا بیس می آریم ببریم جای دیگه. و از اونجایی که داریم از کلاس PhoneBookEntry استفاده می کنیم باید داده ها به جنس و نوع (Type) پراپرتی های همون کلاس در بیان. پس داده ها رو از دیتا بیس می گیره، تبدیلشون می کنه و در واقع مناسبه ظرفی که باید توش ریخته بشن درشون می آره بعد می ریزه توشون.

 

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

و اما رسیدیم به لایه ی نمایش(Presentation Layer):

 

توی لایه ی نمایش ما 2 تا فرم داریم. که فرم اولمون در واقع صفحه ی اصلی برنامه مون رو تشکیل می ده و فرم دوم برای ویرایش داده ها استفاده می شه. فرم ها رو هم که با راست کلیک روی اسم برنامه (Phone Book) و ADD و بعدش هم که انتخاب Windows Form ، اضافه می کنیم.

می مونه ساختار ظاهری برنامه که اضافه کردن یک سری تکست باکس (TextBox) و دکمه(Button) و لیبل(Label) و دیتاگرید(DataGrid) هست که اضافه کردن اینها مخصوصا دیتاگرید رو، توی پست (دفترچه تلفن، بخش دوم،کدها) بررسی کردیم. اینا رو از توی ToolBox می آریم روی فرممون و از توی properties تنظیمات دلخواه مون من جمله سایز و نوع خط نوشته و رنگ نوشته ها و فرمها رو و... انجام می دیم.

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

فرم 1:

1.       اول از همه باید حواستون باشه که به using ها  باید دو تا کلاس DAL و BLL مون اضافه بشه چون قراره از متغییرها و متدهاشون اینجا استفاده کنیم . البته به اضافه ی using های Sql و    Windows.Forms .    

;using System.Data

;using System.Data.SqlClient

;using System.Windows.Forms

;using Phone_Book.BLL

;using Phone_Book.DAL

 

2.         متد () FillGrid :

این متد داده ها رو به وسیله متد()GetEntriesاز دیتابیس می گیره و می ریزه توی یه DataTable .(اگه یادتون مونده باشه این متد خروجی داشت از نوع دیتا تیبل). اول از همه دیتاگرید رو با Null و بعد با داده های دیتاتیبل که توی dt ریختیم  پر می کنیم. چرا با Null پر می کنیم؟ تا اگر جایی مقداری وارد نشده بود همون Null بمونه.

پس کلا این متد وظیفه ی پر کردن دیتاگرید رو به عهده داره.و در حقیقت اطلاعاتی رو که توی پایگاه داده ثبت کردیم نشونمون می ده. مثل نام و شماره ها و آدرس ها...

3.       وقتی فرم لود (Load) می شه اول از همه باید دیتاگرید پر بشه، پس متد FillGrid توی لود ِفرم فراخوانی می شه.

4.       و اما دکمه ی اضافه کردن :

همونطور که یادتونه متد insert توی کلاس DAL یک ورودی از جنس PhoneBookEntry داشت که از طریق این ورودی داده های کاربر رو که توی تکست باکس ها نوشته می شدن می گرفت و به دیتابیس اضافه می کرد. پس نیازه که یک شی نیو کنیم و داده ها رو از طریق این شی که اینجا اسمش PBE هست به متد Insert بدیم. بعدشم که دیتاگرید پر می شه و می تونیم اطلاعات جدید رو ببینیم.

سوال: چرا ;( DAL.PhoneBookDAL.insert( PBE ؟؟ چون داریم از یک NameSpace یا همون فضای نام ِ DAL استفاده می کنیم باید اینجا آورده بشه. اما چون ما توی using هامون اضافه ش کردیم اگر ننویسیم هم مشکلی نیست اما روش کلیش اینه.

نکته: گاهی وقتها توی فضای های نام مون کلاسهای هم نام داریم.در اون صورت حتی اگر توی using ها هم آورده باشیمشون باید توی کد هم بنویسیم (مثل مثال) تا مشخص بشه که کلاس مورد نظر مال کدوم فضای نام هست.

5.       دکمه ی پاک کردن :

می خواییم وقتی کاربر روی یک سطر کلیک کرد و خواست پاکش کنه با زدن این دکمه این اتفاق بیافته. پس id سطر انتخاب شده رو می گیریم و به متد Delete توی کلاس DAL مون می فرستیم.(یادتونه که ورودیش یه id بود.)

6.       دکمه ی ویرایش :

می خوایم این دکمه وقتی فعال بشه که کاربر روی سطری که می خواد ویرایش کنه کلیک کرده باشه ( ابتدای کار Enable این دکمه رو از توی پراپرتیزش false می کنیم) که واسه این کار همونطور که توی کدها می بینین یه شرط گذاشتیم(شرطمون رو هم می تونیم با کلیک روی دیتاگرید،بعد توی قسمت پراپرتیز برین روی Events که همون علامت رعد و برقه، اونجا SelectionChanged رو روش کلیک کنین قسمت کدش باز می شه و می تونین شرط رو بذارین)، از طرفی می خواییم اطلاعات این سطر به صفحه ی ویرایشمون منتقل بشه تا هر قسمت رو کاربر خواست ویرایش کنه، پس برای این کار نیاز به id سطر مورد نظر داریم و این id رو به فرم دوممون می فرستیم. بعدا توی فرم دوم می بینین که این id همونیه که ورودیه متد Retrieve می شه.

 

اون دو تا دکمه ی دیگه ی فرم 1 چیز خاصی نداره. می ریم سراغ فرم دوم.

فرم 2:

1.       توی این فرم فقط using کلاس BLL و Windows.Forms رو لازم داریم.

2.       Id فرستاده شده از فرم 1 رو می گیریم و توی یک آی دی ِ پرایویت (Private) میریزیم که معمولا متغییرهای پرایویت مون رو با _ مشخص می کنیم پس می شه _id . حالا که id رو داریم می دیمش به متد Retrieve . و مطمئنا یادتونه که این متد یه خروجی داشت از نوع PhoneBookEntry که داده ها رو برمی گردوند به لایه ی نمایش. خوب پس یه شی ازش نیو می کنیم به نام ent که از این طریق داده های سطر مورد نظر از دیتابیس خونده می شه و به تکست باکس های فرم 2 منتقل می شه.

3.       بعد از اینکه کاربر تغییرات رو اعمال کرد دکمه ی ثبت تغییرات رو می زنه. که اونجا مشابه دکمه ی اضافه کردن از متد Update استفاده می کنیم با این تفاوت که باید id سطر مورد ویرایش رو هم بفرستیم به دیتا بیس تا اطلاعات همونجا ذخیره شن و تغییرات رو ثبت می کنیم .

 

پ.ن: تا اونجایی که می شد سعی کردم جزئیات رو توی این پست ها بگم. حالا هر جایی رو که جا انداختم یا خوب نگفتم و یا جدای همه ی اینا، براتون سوال پیش اومده بپرسین لطفا.

 

+ نوشته شده در  پنجشنبه سوم اردیبهشت 1388ساعت 18:7  توسط تبسم  | 

دفترچه ی تلفن (نسخه جدید.)،بخش سوم،متدهای کلاس DAL و مروری بر عضوهای استاتیک...

 

سلام و سلامتی.

خوب، رسیدیده بودیم به متدهای کلاس DAL مون. قبلا هم گفتم که این کلاس برای ارتباط با پایگاه داده و خوندن ازش و اعمال تغییرات روشه. همونطور که توی پست های قبلی هم بررسی کرده بودیم، می تونیم هم از استورد پروسیجرها استفاده کنیم و هم می تونیم مستقیما دستورات اس کیو ال مونو اینجا بنویسیم. ما توی این برنامه از استورد پروسیجر استفاده می کنیم ،اینجوری خیلی بهتره چون اینجوری تمرین کردن برای پروژه های دیگه که نیاز به نوشتن کوئیری ها و پروسیجرها و توابع پیچیده تر دارین، مفیدتره،اینکه اونا توی پایگاه داده تون بمونن و تازه تستش هم راحتتر خواهد بود تا اینکه مستقیم توی کد نوشته بشن و همه چی قاطی شه.

قبل از اینکه شروع کنیم، توی پست قبلی راجع به استاتیک بودن یک عضو صحبت کردیم. اجازه بدین یه کم بیشتر راجع به اینکه اصلا این استاتیک چیه صحبت کنیم:

اعضای استاتیک (Static (Shared) Members):

اول از همه بگم که کلمه ی کلیدی Shared توی ویژوال بیسیک دات نت (Visual Basic.net) استفاده می شه و Static در سی شارپ دات نت (C#.net) .

وقتی فیلد، متد یا کلاسی رو حتی، استاتیک تعریف می کنیم همیشه از این عضو یکی و همه جا یکسان ازش داریم. چرا؟ چون الان براتون با مثال نشون می دم که عضوهای استاتیک بدون ایجاد شی یا نمونه (object ,instance) - یا بهش وهله هم گفته می شه – استفاده می شن و مستقیما به اسم کلاس می چسبن نه به وهله یا شی. به همین دلیل بعد از تعریف یک فیلد استاتیک شما می تونین بدون ایجاد شی، بهش مقدار بدین.

فرضا اینو داریم: یک فیلد که استاتیک تعریف شده:

Public class Test

}

    ;public  static int MyField

{

حالا شما نیاز ندارین شی ای از این کلاس Test بسازین (newکنین) بعد از این فیلد استفاده کنین. همونجا می تونین بهش مقدار اولیه هم بدین. مثلا:

;Public static int MyField = 20

 توی برنامه مون فقط کافیه هر جا بهش احتیاج داشتین از Test.MyField (نام فیلد استاتیک . نام کلاس) استفاده کنین که مقدارش هم همیشه مشخص و یکسانه.

اما حالا اگه این MyField استاتیک نبود چی؟ اونوقت شما باید شی نیو می کردین بعد ازش استفاده می کردین.اینجوری:

;()Test  Object1 = new Test

;()Test  Object2 = new Test

;Object1.MyField = 10

;Object2.MyField = 30

خوب چی شد؟! الان این شد 2تا فیلد متفاوت با مقدارهای متفاوت. (دینگ دینگ: Object1 بعنوان مثال، یک Instance از کلاس Test است.)

 پس از اعضای استاتیک، فقط یه نمونه داریم صرف نظر از اینکه چه تعداد نمونه(Instance) از نوعشون (Type)ساخته شده.

 نمی شه اعضای استاتیک رو با Instance صدا کرد یعنی اگر توی مثال بالا MyField استاتیک باشه نمی شه نوشت  ;Object1.MyField = 10 .

 

در مورد متد ها هم همینه، یعنی به Type وابسته هستن نه نمونه ای(instance) از نوع (Type). مثلا شما یه سری متد مهم دارین. اینا رو Static تعریف میکنین و می ذارین توی یه کلاس. بعد هر جا خواستین ازشون استفاده کنین دیگه لازم نیست اول از کلاس یه شی بسازین و بعد از متد استفاده کنین.مستقیم از اسم کلاس و متد استفاده می کنیم.دقیقا مثل کاری که توی دفترچه تلفن کردیم. اگه دقت کنین می بینین متدهای کلاس ِ DALمون رو public static  تعریف کردیم و توی لایه ی نمایش برای فراخوانیش از اسم کلاس . اسم متد استفاده کردیم.

نکته:

1.اعضای استاتیک (static members)، می تونن public  یا private باشن.

2. از یک عضو استاتیک نمی شه به یک عضو غیر استاتیک (داینامیک) دسترسی داشت. اما

    از یک عضو داینامیک می شه به یک عضو استاتیک دسترسی داشت.

حالا چرا اینجوریه؟ برای این نمی شه از عضو استاتیک به عضو داینامیک دسترسی داشت چون عضو استاتیک خارج از وهله کار می کنه و معنی نمی ده که بخواییم به فیلد داینامیک دسترسی پیدا کنیم چون این فیلد بعد از تعریف وهله (new کردن یه شی از کلاس) معنی پیدا می کنه نه توی نام کلاس. مثلا:

}public class MyClass 

   

;public static int A

    ;public int B

 

    }  ()public static int Add  

   ??!!! return (MyClass.A + B);  // error, B

{

{

 

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

و اما می ریم سراغ متدهای کلاس DAL . درکلاس DAL معمولا یک سری متدهایی داریم که با دیتا بیس در ارتباط هستن. در نتیجه هر متدی که توی DAL داریم معادلش یه استورد پروسیجر (Stored procedure) هم توی دیتا بیس داریم. برای برنامه هایی مشابه دفترچه ی تلفن اصطلاحی داریم با نام CRUD (Create ,Retrieve ,Update ,Delete)،که توابعی هستند که هم توی کلاس DAL ازشون استفاده می شه هم استورد پروسیجرهاش رو داریم.

  

متد () GetEntries:

  1. این متد قراره چی کار کنه؟

همونطور که از اسمش مشخصه قراره یه سری داده هامون رو  از پایگاه داده بخونه. برای اینکه داده های پایگاه داده رو به کاربر نشون بدیم احتیاج به این متد داریم تا به پایگاه داده وصل بشه و این کارو برامون انجام بده با استفاده از استورد پروسیجر ِ Select . مثلا نام و نام خانوادگی و شماره تلفن و ... که قبلا کاربر ثبت کرده و حالا می خواد ببینتشون.

  1. این متد چه جوری کار می کنه؟

1-2 . اول باید یک شی از کلاس SqlConnection ایجاد کنیم و با ConnectionString آدرس دهیش کنیم .(به پست قبل مراجعه کنین.). این کار یه کانال به پایگاه داده برامون باز می کنه.

2-2. حالا یک شی از کلاس SqlCommand ایجاد می کنیم. همونطور که از اسمش مشخصه کامندها برای دستوراتی که قراره به پایگاه داده فرستاده بشن استفاده می شه.

3-2. حالا کانکشنمون رو باز می کنیم. یعنی چی؟! خوب کانالمون رو به پایگاه داده باز می کنیم دیگه. این کارو ابتدای ارتباط و دادن دستورات به دیتابیس انجام می دیم و در آخر کار هم می بندیمش. می دونین که امنیت و اینا...

4-2. حالا باید پارامترهای کامندمون رو مشخص کنیم. اول کانکشن رو بهش می دیم یعنی می گیم از کجا دستورات رو بفرسته. بعدش نوع دستور رو که قرار استفاده از استورد پروسیجر باشه بهش می گیم و در انتها هم اسم ِ استورد پروسیجرمون رو می دیم.

** اینجا یک ;cmd.Parameters.Clear // داریم. (این دوتا اسلش رو گذاشتم تا این خط جز اجرای برنامه نباشه، چون اینجا بودن یا نبودش فرقی نداره.) این دستور پارامترهایی که قبلا به کامند اضافه شده باشن رو حذف می کنه تا مشکلی توی اجرای کامندی که ما می خواییم پیش نیاد.اما توی این برنامه چون ما در هر قسمت،در هر متد از اول ایجادش می کنیم (New) نیازی نیست.

5-2. همونطور که در تعریف متد می بینین، متد ما یک خروجی از جنس دیتاتیبل داره(پشت متد نوع خروجی ای که به ما می ده رو می نویسیم و جلوش توی پرانتز ورودیای که می گیره همراه با جنسش- جلوتر می بینین!). یک جدول که داده ها رو توش می ریزه و به ما برمیگردونه. پس باید یه شی از جنس دیتاتیبل ایجاد کنیم و داده ها رو توش بریزیم که اینجا اسمش رو گذاشتیم dt .

6-2. حالا چه جوری داده های Select شده رو می خونه؟ و همین جا بگم وقتی داره چیزی رو می خونه باید یه جایی هم داده های خونده شده رو بریزه درسته؟ خوب کامند یک دستور داره برای این کار به اسم ()ExecuteReader . خوب وقتی این دستور داده ها رو خوند اونا رو می ریزیم توی شی ای از جنس SqlDataReader به نام مثلا dr .

7-2. و سرانجام جدول dtمون رو با داده های dr لود می کنیم و returnهم که جدول رو برمی گردونه.

8-2. در آخر کار هم کانکشن رو می بندیم. این باید همیشه یادتون بمونه که هر بار که کانکشنی رو باز می کنین باید حتما ببندیدش.

سوال:

1.       این{}try و {}finally برای چی هستن؟

جواب: در برنامه نویسی مبحی داریم بانام Exception Handling. که در واقع برنامه ریزی و رفع Errorهایی که در زمان اجرای برنامه ممکنه پیش بیان که بهش می گن (Run - Time Error)،اینا error هایی هستند که بعد از Test و Debug برنامه ممکنه پیش بیان، بعد از اینکه مثلا errorهای مربوط به Syntax ِ برنامه رو رفع کردیم.

برای اداره کردن Exception ها از سینتکسی با نام Try…Catch…Finally… استفاده می کنیم.

 

Try

{

کدهای معمولی برنامه مون رو اینجا توی بلوک try می نویسیم.

}

Catch

{

کدهایی که باید در صورت مواجه شدن با خطاهای زمان اجرا(run-time errors)، اجرا بشن تا خطا را اداره (Handle) کنند اینجا قرار می گیرند.

}

بعد از بلوک try می تونه یک یا چندین Catch وجود داشته باشد که هر کدوم یه Exception رو برطرف کنه...

.

.

Finally

{

کدهایی رو که می خواییم در هر صورت اجرا بشن، حتی مثلا وقتایی که اگر خواستیم error  رو برگردونیم،به اصطلاح پرتاب کنیم ، یعنی به کاربر پیغام بدیم (Throw)، یا حتی اگر توی کدها Return داشتیم و از برنامه خارج شدیم،باز اجرا بشن از این بلوک استفاده می کنیم.که قبل از خارج شدن از برنامه کدهای اینجا اجرا بشن.

}

 

2.       دستورهای کامند چند دسته هستن؟

جواب: و اما دستورات کامند 3 جورن:

1.       دستوراتی که جوابی ندارن و چیزی برنمی گردونن، مثلا بهش می گین برو فلان دیتا رو از فلان تیبل پاک کن، یا فلان داده رو اضافه کن. اسم این دستور هست: ()ExecuteNonQuery .

یه مثال توی SQL برای این دستور :

Delete From Table_pb

Where  id=@id

 

2.       دستوراتی هستن که جوابشون یک عددِ. مثلا می خوایید بدونین چندتا شماره ی تلفن توی دفترچه تلفنتون دارین.اسم این دستورم هست : ()ExecuteScaler .

Select Count *  From  Table_pb

 

3.       و نوع سوم همونطور که استفاده کردیم، یک مجموعه دیتا برمی گردونه. ()ExecuteReader .

Select * From  Table_pb

 

 

متد Insert :

  1. قراره این متد چی کار کنه؟

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

نکات:

1-1.      همونطور که مشخصه این متد قرار نیست خروجی داشته باشه پس void تعریف می شه که پشت متد نوشته می شه و به این معنیه که متد ما خروجی نخواهد داشت.

2-1.      دلیل پابلیک بودن و استاتیک بودن رو هم که توی پست قبلی بررسی کردیم.

3-1.      خوب رسیدیم به اولین جایی که از کلاس BLL استفاده می کنیم. قرار شد یه سری ورودی از کاربر بگیریم و به این متد بدیم و همونطور که قبلا هم گفتم لایه ی BLL رابط بین کاربر و لایه ی DAL ِ که به دیتابیس متصله. پس یه شی از جنس کلاس BLL تعریف می کنیم که این می شه وردیه متد Insert .

 

  1. متد Insert چطوری کار می کنه؟

1-2. قسمت اولش که باز کردن یه کانال و مقدار دهی پارامترهای کامنده مثل متد قبلیه...

2-2.  خوب اینجا یه سری دستور مشابه پشت هم داریم که پارامترهایی رو که می خواهیم برای اجرا به دستورمون بدیم تا اضافه کنه به دیتا بیس اینجا به کامند می دیم. برای فراخونی پارامترها لازمه که نوع داده شون رو هم مشخص کنیم، که همه از همون نوعی هستند که توی جدول دیتابیس و همینطور ورودی استورد پروسیجرها تعیین کردیم. (SqlDBType یک نوع داده توی پایگاه داده ست،تقریبا مشابه ی انواع داده در برنامه نویسی.)

3-2. و بعد از این پارامترها توسط ورودیهایی که کاربر توی تکست باکس ها وارد می کنه و کلاس BLL برامون می فرسته، مقداردهی می شن و با دستور ExecuteNonQuery که جلوتر گفتم داده ها به دیتا بیس اضافه می شن.

سوال:

1.       چرا برای 3تا از ورودیهامون شرط گذاشتیم؟ و شرط چی رو بررسی می کنه؟

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

و اما شرط ما هم ،همین کارم می کنه ، یعنی اگر اطلاعات پر شده باشه و خالی نباشه (علامت ! یعنی نامساوی) ، مقدار تکست باکس و بده به پارامتری که قراره با کامند واسه اجرا بره به دیتابیس .

2.       String پشت ِ ()IsNullOrEmpty واسه چیه؟

جواب: IsNullOrEmpty یک متد استاتیک از کلاس ِ String است بنابر داستان مفصل Static ها، اسم متد استاتیک با اسم کلاس می آد. ;()String.IsNullOrEmpty

 

خوب، می مونن متدهای Delete و Update و Retrieve.

متد (Update)با متد (Insert) فرق چندانی نداره جز اینکه یک آی دی (Id) هم می گیره که این id در واقع شماره ی سطریه که کاربر می خواد ویرایشش کنه. که بعدا توی لایه ی نمایش می بینین که از این id چه جوری استفاده می شه.

 متد (Delete) هم مشابه متد(Insert) هست با این تفاوت که فقط مقدار (Value) ِ آی دی (id) تنظیم می شه. که در واقع با این کار id سطری رو که می خواییم از جدولمون توی پایگاه داده پاک بشه به دیتا بیس ارسال می کنیم. توی لایه ی نمایش می بینین که این id با انتخاب و کلیک کاربر روی سطر مورد نظرش مشخص می شه.

فقط متد (Retrieve) از این کلاس DAL می مونه برای پست بعدی.

 

پ.ن : اگر تا اینجا سوالی براتون پیش اومده ، تبسم خوشحال می شه بتونه کمک کنه.

 

 

+ نوشته شده در  دوشنبه سی و یکم فروردین 1388ساعت 16:4  توسط تبسم  | 

دفترچه ی تلفن (نسخه جدید.)، بخش دوم. لایه ها...

 

سلام.

امیدوارم تونسته باشین فایل برنامه رو از پست قبل دانلود کرده باشین و موفق شده باشین ساختار و کدهای برنامه رو ببینین. چون دیگه تصویر رو نمی ذارم پس شما باید به کد مراجعه کنین و توضیحات رو تطبیق بدین. قصد دارم به صورت سوال و جواب کدها رو توضیح بدم،سوالهایی که ممکن براتون پیش بیاد.(سعی می کنم همه رو حدس بزنم!) اگه روشی بهتری به ذهنتون می رسه که می تونه بهتر کمک کنه خوشحال می شوم در جریان بذارینم.

دینگ دینگ: بعضی مفاهیم که مربوط به ساختارها و سینتکس های سی شارپ می شه رو در ادامه ی پست بحث مفاهیم می گم براتون.فعلا فقط باهاشون کار می کنیم.

خوب، بذار شروع کنیم:

1.معماری چند لایه چیه و اصلا چرا ازش استفاده می کنیم؟

توی برنامه نویسی مبحثی داریم به نام معماری چند لایه (n-tier) ، که متداولترینش معماری 4 لایه ست.یعنی چی؟ یعنی برنامه رو به 4 لایه، 3 بخش تقسیم می کنیم که این 4 لایه با هم در ارتباط هستند. ما می تونیم همه کدهامون رو توی همون فرم ها (Forms) و دکمه ها(Buttons) بنویسیم ،اما این کار وقتی پروژه کوچک و ساده ست، کار خوبی ایه، ولی وقتی برنامه بزرگتر می شه و کدها بیشتر می شن و همچنین صفحه هات و فرم هامون که با کاربر از طریقشون ارتباط برقرار می کنیم خیلی مفید نیست،نه اینکه برنامه تون کار نکنه، چرا، اما همونطور که توی پست قبل گفتم می شه اسپاگتی کد یعنی مثل رشته های ماکارانی کدها توی هم گره می خورن. پیدا کردن متغییرها و متدهایی که لازم دارین سختتر می شه،برای یه تغییر جزئی باید کلی بگردین و کلی جاها رو تغییر بدین،گاهی هم مجبور می شین یه متد رو چند جا توی صفحه ها یا فرم ها و دکمه های مختلف بنویسین و...

مهمترین علتی که لایه بندی رو انجام میدیم برای اینه که وظیفه هر بخش از برنامه جدا از هم تعریف میشه، یعنی یه لایه میشه مسئول برقراری ارتباط با پایگاه داده (لایه DAL)، یه لایه مسئول نمایش به کاربر (لایه Presentation) و همینطور تا آخر . برای همین وقتی که بخواین یه بخش رو یه مقدار عوض کنیم لایه های دیگه دست نمیخورن. مثلا اگه بخوایم یه برنامه تحت ویندوز رو به برنامه تحت وب تبدیل کنیم تنها لایه Presentation عوض میشه. یا مثلا اگه بخوایم دیتابیس رو از SQLServer ببریم روی Access یا برعکس، فقط لایه DAL عوض میشه.

بعلاوه اگه اشکالی در یه بخش بوجود بیاد کافیه دنبال اشکال توی همون بخش بگردین و اگه تغییر در یک لایه نیاز باشه شانس بیشتری دارین که حوزه تغییرات خیلی گسترده نشه و در همون لایه بمونه.

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

یکی از مهمترین مزیت هایی که لایه ای کردنه پروژه مون داره افزایش امنیت داده های برنامه مونه. چطوری؟ خوب اول اینکه جلوتر برات خواهم گفت که یکی از این بخش ها برای ارتباط با داده هاست و فقط این بخشه که مستقیم به پایگاه داده مون دسترسی داره و ما از لایه ای که با کاربر سرو کار داره توسط یه لایه ی منطقی که شرایط امنیتی رو اونجا بیشتر روی موجودیت هامون (اشیامون،متغییرهامون) اعمال می کنیم، به این لایه دسترسی داریم. به علاوه ممکنه توی بعضی پروژه های بزرگ که نیاز به امنیت بالاتری دارن، لایه ها روی سیستم های جدا قرار بگیرن. که هر کسی اجازه ی دسترسی به سورس برنامه رو نداشته باشه.

البته لایه بندی برای برنامه نویسی های تحت وب، ASP.Net هم کاربردهای خوبی داره. هرجند که نوشتن چند تا کلاس اصافه شاید به نظر از معایبش بیاد اما در برابر سودی که این کلاس های اضافه با خودش همراه دارن قابل چشم پوشیه. علی الخصوص توی همین برنامه های تحت وب که تعداد صفحه هات زیادتر هستند.

حالا ما می آییم و برنامه رو به 3 قسمت تقسیم می کنیم و هر قسمت یه کاری برامون انجام می ده. اینطوری می دونیم برای هر تغییر یا موردی که نیاز داریم دقیقا کجا بریم .

2.لایه های معماری 3 لایه چی هستند و چی کار می کنن؟

۱) لایه پایگاه داده

2) لایه ی دسترسی به داده ها (Data Access Layer که به اختصار DAL نامیده میشه)
3) لایه ی منطقی (Business Logic Layer که به اختصار BLL نامیده میشه)
4) لایه نمایش (Presentation Layer)

لایه ی نمایش که همون رابط گرافیکی با کاربره (همون GUI)، یعنی مثلا اینجا فرم ها و آبجکت هایی که روش داریم، این لایه از طریق لایه ی BLL با لایه ی DAL ارتباط برقرار می کنه و به داده ها و در واقع پایگاه داده دسترسی پیدا می کنه.

پس از اونجایی که BLL نشون می ده ما چه موجودیت هایی توی برنامه داریم (مثلا توی این برنامه ما نام  و نام خانوادگی و شماره ها و ... رو داریم.)،اولین جایی توی کل برنامه ست که باید نوشته بشه. در واقع این لایه مسئول داده هاییه که بین لایه ی نمایش و لایه ی DAl ِ ، رد و بدل می شن. در واقع یه جور محافظت از داده هاست ، شروطی که لازمه روی اطلاعات اعمال بشه به لحاظ درجه ی اعتبارشون مثلا.

و بعد می رسیم به DAL ، توی این لایه ما کلا مواردی که به پایگاه داده ارتباط پیدا می کنه  و سر و کله زدن با داده هاست رو می نویسیم، مثل کانکشن ها و متدهایی مثل اضافه کردن و حذف کردن و خوندن اطلاعات و... در واقع این لایه ، واسط ما با پایگاه داده ست و از طریق این لایه داده ها رو از پایگاه می خونیم، روشون تغییرات خواسته شده رو مثل ِ مثلا پاک کردن و آپدیت کردن اعمال می کنیم و یا داده ها رو به پایگاه داده اضافه می کنیم. 

و حالا لایه ی نمایش از طریق یه آبجکت از جنس کلاس BLL اطلاعات رو از کلاس DALمی گیره یا بهش اطلاعات می فرسته .

لایه پایگاه داده هم که در واقع همون سیستم مدیریت پایگاه داده ای (DBMS) هست که باهاش کار میکنین (اسمش خارجیه ولی همون SQLServer یا Access یا Oracle میشن این لایه)

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

 

لایه ها ی برنامه نویسی

 

یه قانون خیلی مهم اینه که هرگز توی سیستم لایه بندی یه لایه نباید لایه بالای سر خودش رو صدا بزنه، همیشه ارتباط از بالا به پایینه و نه از پایین به بالا. یعنی هرگز لایه BLL نمیتونه تابعی از یک فرم رو که به لایه Presentation مربوطه رو صدا کنه یا یه چیز رو توش تغییر بده. چون اگه این اتفاق بیفته در صورتی که بخوایم لایه بالایی رو تغییر بدیم مجبوریم لایه پایین رو هم تغییر بدیم و عملا لایه بندی دیگه مفهوم خودش رو از دست میده.

3. چه جوری لایه ها رو بسازیم؟

من برای مثال از روی برنامه می گم که هم قدم قدم توی کدها پیش بریم و هم برای شما راحتتر باشه. پس می تونین یه برنامه  جدید باز کنین... 

لایه ی BLL :

1.       توی پنجره ی سولوشن اکسپلورر (اگر پنجره تون باز نبود از منوی View بازش کنین) ، رویBook   Phone (اسم برنامه تون)، راست کلیک می کنین و از گزینه ی ADD یک New Folder می سازین به اسم BLL.

2.       حالا روی این پوشه ی BLL راست کلیک کنین و از گزینه ی ADD برین و یک Class ایجاد کنین.

3.       حالا با کلیک روی این کلاس که پسوند cs داره کلاس باز می شه. اسم  کلاس رو که توی NameSpace ِ   Phone_Book .BLL قرار داره (به خاطر این فولدر بندی خود به خود این فضای نام NameSpace   ایجاد میشه) به  public class PhonBookEntryتغییر می دیم.کلاس رو پابلیک تعریف می کنیم چون قراره ازش توی لایه های دیگه مون (کلاسهای دیگه ی برنامه مون) استفاده کنیم.

4.       حالا کدهایی که توی این کلاس هست رو یا بنویسین یا خوب نگاه کنین. می بینین که اینجا متغییرها و در واقع ستون های جدول پایگاه داده مون رو که از طریق اونها اطلاعات رو دریافت و ثبت می کنیم تعریف شدن. همونطور که می بینین یه کمی تعریفش فرق داره. اینجا از Get و Set استفاده شده که بهشون می گیم پراپرتی . در واقع استفاده از پراپرتی ها برای تعریف خصوصیت های اشیامونه اما اینجا که بدون هیچ شرطی ازشون استفاده شده در واقع برای بالا بردن امنیت متغییرهاست چون همونطور که می بینین متغییرها پابلیک تعریف شدن تا توی کلاسهای دیگه استفاده بشن پس باید امنیت رو ببریم بالا.

توجه: در پروژه های واقعی لایه ها هر کدوم یک یا چند پروژه جداگانه هستند که به صورت فایلهای DLL کامپایل میشن، اما توی این پروژه آموزشی همه رو توی یک پروژه میذاریم.

لایه ی DAL :

1.        مجددا روی phonebook راست کلیک کنین و پوشه ی DALرو ایجاد کنین و بعد توی این پوشه یه کلاس ایجاد کنین به نام public class PhoneBookDAL ، تا اینجاش که شبیه BLL بود. (اینم خود به خود میره توی فضای نام Phone_Book .DAL)

2.       خوب اینجا حالا باید یه کار خیلی مهم انجام بدیم و اون اضافه کردنه Using هایی که برای استفاده از یه سری کلاسهای تعریف شده توی ویژوال استودیو  و اجتناب از تکرار هر بار آدرس دقیقشون، باید اضافه کنیم . بی زحمت اضافه کنین:

;using System.Data

;using System.Data.SqlClient

;using Phone_Book.BLL

 

که دو تای اولی برای استفاده از کتابخانه ی توابع مربوط به پایگاه داده ی اس کیو ال هست و سومی هم برای استفاده از کلاس BLL توی این کلاس DAL.

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

قبل از تعریف متدهامون توی کلاس، ConnectionString رو تنظیم می کنیم. همونطور که توی پست قبل گفتم.

سوال : حالا این سوال پیش می آد که اصلا این کانکشن استرینگ چی هست و چرا اصلا استاتیک (Static)تعریف شده؟(اینکه چرا پابلیک تعریف شده که معلومه دیگه ؟! چون قراره توی متدهای این کلاس که خودشون توی کلاسهای دیگه استفاده می شن، به کار گرفته بشه.)

جواب: برای جواب به این سوال می خوام چند خط جلوتر به SqlConnection دقت کنین. کانکشن استرینگ در واقع یه سری تنظیماته مثل اسم پایگاه داده و اسم سرور که اس کیو ال کانکشن برای دسترسی به داده های پایگاه داده به این تنظیمات و در واقع به این آدرس دهی احتیاج داره برای اینکه بفهمه باید به کجا و از چه طریقی وصل بشه.

 

;(SqlConnection con = new SqlConnection(PhoneBookDAL.ConnectionString

 

حالا به ورودیه اس کیو ال کانکشن دقت کنین! خوب می بینین که کانکشن استرینگ چسبیده به خود ِکلاس. این به خاطر اینه که استاتیک تعریفش کردیم و این یعنی یه دونه کانکشن استرینگ داریم که فقط به خود کلاس می چسبه و نه به آبجکت (شی،اینتس(Instance)، وهله) های  Newشده از کلاس.

** البته توی متد Insert می بینین که می شه یه جور دیگه هم  کانکشن استرینگ رو به اس کیو ال کانکشن داد که البته عملا هیچ فرقی ندارن.

 

;()SqlConnection con = new SqlConnection

;con.ConnectionString = PhoneBookDAL.ConnectionString

 

4.       ... متدهای کلاس ِ   DAL  ، بمونه واسه پست بعدی...

 

پ.ن: تا اینجا رو اگه سوالی دارین بپرسین لطفا... ممنونم. موفق باشین.

 

 

+ نوشته شده در  سه شنبه بیست و پنجم فروردین 1388ساعت 0:57  توسط تبسم  | 

دفترچه ی تلفن (نسخه جدید.)، بخش اول،اجرای برنامه...

 

 سلام. می بینم که همه می خندید و سال خوبی رو شروع کردین،باعث خوشحالیه.آرزو می کنم سال زیبایی داشته باشید.

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

اگر یادتون مونده باشه قرار شد ویرایشش کنیم و یه ذره اصولیتر و کاملتر بنویسیمش.(به قول بعضی ها یه مقدار از اسپاگتی کد نوشتن فاصله بگیریم) با توجه به اینکه یه سری از دوستان در شروع کارن شاید براشون ردیف شدن یه سری مفهوم پشت هم، به نظر سخت بیاد اما به قول این خارجی ها، تِراست می! (trust me!)، اینجوری شاید به نظر بیاد اولش گیج می شی اما کم کم که جلو می بریش و خط به خط یاد می گیریش بعد از زمانی که بستگی به خودمون داره، می بینی که با یه پروژه،  کلی چیز یاد گرفتی، نه تنها مفاهیمو بلکه نحوه ی استفاده شون رو.

خوب اینا رو گفتم چون اگر بخوام کدها رو توضیح بدم ، جزئیات زیاده. سعی می کنم تا اونجایی که می شه همشو بگم اما اگه جایی رو جا گذاشتم یا خوب نگفتم و یا خدا رو چه دیدی! اگه اشتباه کردم، لطف کن بگو به من دوست من.

قبل از همه اینکه اگر بخوام تصویر کدها رو بذارم خیلی برداشتنش و ردیف کردش ممکنه مشکل باشه،پس سورس برنامه رو می ذارم،لطفا دانلود کنین تا بریم سراغ توضیحات از ابتدای ابتدا.اگر بعضیاتون بعضی جاهاش حوصله تون سر می ره، تند تند ورق بزنین!

  1. لطفا دقت کنین که این برنامه با زبان سی شارپ دات نت و در ویژوال استودیوی 2008 نوشته شده، پس اگر نتونستید به هر دلیلی بازش کنید بگید که کدها رو یه جور دیگه بهتون بدم. بعلاوه فایل پایگاه داده هم توی پوشه هست. کافیه یه پایگاه داده ی خالی بسازین و این فایل رو اونجا اجرا کنید تا جداول و استورد پروسیجرها ایجاد بشن.
  2. و بعد نحوه ی اتصال با پایگاه داده است که قبلا بررسی کردیم .فقط لازمه شما دیتا سورس رو در کانکشن استرینگ با کامپیوتر خودتون سِت کنید. (خوب راهنمایی : کانکشن استرینگِ مورد نظر، توی پوشه ی DAL و توی کلاس DAL قرار داره، پیداش کردین؟! خوبه. اونی که جلوی دیتا سورس نوشتم رو بردارین و به جاش مال خودتونو بذارین. )
  3. از منوی view، برین و Server Explorer رو باز کنید. خوب از اینجا می تونید کانکشنتون رو اضافه کنین.(Add کنین).شایان ذکره که از   Sql Server استفاده کردم. وقتی زیر شاخه ی Data Connections، اسم دیتا بیستونو دیدید،روش راست کلیک کنید و Properties رو انتخاب کنید . توی پنجره ی پراپرتیز، کانکشن استرینگتون رو پیدا می کنین.
  4. خوب حالا می تونین اجراش کنین . اگه همه چیزو تست کنین می فهمین یه جای کار این برنامه می لنگه اگه گفتین؟!! (نه اینکه کلا بلنگه ها، نه، فقط می شه بهترش کرد!)

 

توضیحات کد رو از پست بعدی شروع می کنم چون این پست خیلی طولانی و براتون خسته کننده می شه. کدها رو یه نگاه بندازین ، فعلا فقط اینو می گم که همونطور که می بینن از معماری 3لایه استفاده کردیم تا کدهامون در هم و برهم نباشه. اگه دقت کنین می بینین که توی سولوشن اکسپلورر، کدها به 3دسته تقسیم شدن، پوشه ی BLL که می شه لایه ی BLL، پوشه ی DAL که می شه لایه ی DAL، و فرمهامون که در واقع از طریق اونها با کاربر ارتباط داریم که می شه لایه ی نمایش. حالا این لایه ها چی هستن و چی کار می کنن به زودی مشخص می شه...

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

                                                                                                 موفق باشید.

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

 گلها جواب زمینند به آفتاب
نه زمستانی باش که بلرزانی
نه تابستانی که بسوزانی
بهاری باش که برویانی

این روزگار است که به عبودیت انسان مبارک میگردد، روزنو شده به عبودیتتان مبارک...

 

+ نوشته شده در  شنبه بیست و دوم فروردین 1388ساعت 2:35  توسط تبسم  | 

مفاهیم ابتدایی سی شارپ (1)

 

سلام.

قبل از اینکه ویرایش جدید دفترچه تلفن رو بذارم، بهتر دیدم یه سری از مفاهیم و قواعدی رو که در سی شارپ دات نت استفاده می شه بگم. بعضی از دوستان کامنت گذاشتن که چون بعضا اصلا برنامه نویسی نکردن یا با برنامه نویسی های شی گرا کار نکردن و یا بعد از مدتها تازه شروع کردن، عقیده شون اینه که باید از پایه شروع کنن...

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

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

و اما:

همونطور که دیگه الان می دونین سی شارپ دات نت از زبانهای شی گرا ست. حالا اینکه اصلا شی گراست یعنی چی و مفهیمی که توش هست مثل کلاس به چه معنین، باید بررسی کنیم. توی کتابها و سایت های آموزشی تعریف های زیادی می بینین، من سعی می کنم با توجه به اون چیزایی که فهمیدم براتون بگم، فرض کن منم یکی مثل تو که تازه شروع کردم و حالا چیزایی که فهمیدمو اینجا برات می گم :

  1. قبل از هر چیز بگم دلیل اینکه ما از برنامه های ساخت یافته ای مثل پاسکال  و C به سمت زبانهای شی گرا حرکت کردیم اینه که قبل از هر چیزی، زبانهای راحتترین، و خیلی راحتتر می تونین تغییراتی رو که می خوایین اعمال کنین، راحتتر قابل گسترشن و از همه ی اینا گذشته از اسمش پیداست که به دنیای واقعی نزدیکتر و ملموس ترن.
  2. زمانی که شما با یک زبان برنامه نویسی شی گرا کار می کنید انگار توی یه محیط بازی گرافیگی قرار دارید،اینطوری تصور کنید که شما توی این محیط هستید و می خوایید مثل دنیای واقعیتون اون دنیا رو بسازید، در واقع می خوایین دنیای خودتونو بسازین.حالا خودتو وسط یه همچین محیطی تصور کن.. خوب این حالا یعنی چی؟ یعنی تو داری شی گرایی فکر می کنی، اینکه مثلا الان دوست دارم یه درخت اینجا باشه، یه خونه سمت چپ، یه ماشین گوشه ی خیابون و ...
  3. همین که فکر کردی دوست داری درخت داشته باشی، خونه داشته باشی و ماشین و ... همین ذهنیت می شه کلاس هات که تعریفشون می کنی . (Class)
  4. و وقتی درخت هایی از روی کلاسهات می سازی و توی خیابونت قرار می دی، یا خونه های مختلف و ماشین های کنار خیابون، اینا می شن شی .(Object). همونطور که می بینین شی هات رو از روی کلاسهاتون می سازین که توی محیط برنامه نویسی ما می گیم فلان شی رو از فلان کلاس ساختیم یعنی New کردیم. اینکه چرا باید متغییری که از نوع کلاس تعریف می شه حتما قبل از استفاده new بشه جلوتر می گم. کلاسها مثل الگوی خیاطی هستن و اشیاء مثل لباس. الگوی خیاطی رو نمیشه مستقیما پوشید تا زمانی که یه لباس از روش دوخته بشه. البته هر لباسی هم پارچه و نخ و دکمه خودش رو داره و الگو این چیزها رو تعیین نمیکنه
  5. خوب حالا وقتی یه ماشین تعریف کردین یکی مثلا می گه دوست دارم ماشینم 2 تا در داشته باشه، آبی باشه و ... و یکی دیگه خصوصیات دیگه ای مد نظرشه یا اصلا دوست دارین توی محیط مجازیتون چند تا ماشین مختلف داشته باشین.حالا این خصوصیات ماشینتون می شه فیلد یا پراپرتی هاتون.(Property or Field). در واقع متغییرهایی هستند که توی دل کلاس تعریف می شن.
  6. حالا شما می خوایین این دنیای مجازیتو یه کمی تحرک داشته باشه، مثلا می خوایین ماشینه حرکت کنه، یا آدمی که کنار رودخونه س شروع کنه به دویدن و یا ایستادن، خندیدن و ... خوب اینا می شن مِتد ها یا توابعتون. (Method).متدها دستوراتی هستند که شما به اشیاتون می دین.
  7. و آخرین مفهوم اصلی ای که داریم چیزیه به نام ایونت یا وقایع و رخدادها (Event). حالا این چیه،فرض کنین آدمی که بهش گفتین بدوه اونم کنار رودخونه، یهو برسه به یه پرتگاهی یا مانعی، اینجا شما باید بهش بگین اگر به مانعی مثل این رسیدی بایست. یا ماشینتون داره با سرعت حرکت می کنه باید بهش بگین اگر به یه آدم رسیدی ترمز کن و ... در واقع در برابر اتفاقاتی که احتمال وجودشون هست راه حلی ارائه بدین.

 

**خوب این از شی گرایی . توی ویژوال استودیو ما فقط با کلاسها و آبجکت ها و متدها و متغییرها(فیلدها) و رخدادها سرو کله می زنیم. مثلا همون Sqlconnection ی که در پست های قبلی استفاده کردیم یه کلاسه که ما ازش شی نیو می کنیم و ... یا دکمه ها، لیبل ها...

اگه دقت کنین برای کلاسها و متدها شکل های خاصی هم هست توی ویژوال استودیو که این به تشخیص ما کمک می کنه، مثلا اون مکعب های صورتی متد هستند و ...

 

انواع نوع داده و یه سری مفهیم و قابلیت های محیط ویژوال استودیو رو  هم خواهم گفت اما یادتون باشه دونستن این مفاهیم تا وارد این محیط ویژوال و کدنویسیش نشین قابل درک نمی شه... موفق باشین.

 

+ نوشته شده در  یکشنبه هجدهم اسفند 1387ساعت 21:43  توسط تبسم  | 

دفترچه ی تلفن (بخش دوم، کدها)

 

*** به زودی این پست با تغییرات زیادی ویرایش می شه!!

قبل نوشت:برای وضوح بیشتر تصاویر اونها رو ، روی هاردتون ذخیره کنید و از اونجا بازشون کنید.

 

سلام دوستان.

تا اونجایی رسیدیم که کانکشن رو بین ویژوال استودیو و پایگاه داده مون برقرار کردیم. برای راحتی کارمون فقط هم یه جدول (Table) ساختیم. به یک سری استورد پروسیجر (Stored Procedure) هم نیاز داریم مثل اضافه کردن، پاک کردن،آپ دیت (ویرایش) کردنه جدولمون توی SQL  که کد اینها رو هم باید توی پایگاه دادمون بنویسیم و بعد توی برنامه ی ویژوالمون ازشون استفاده کنیم. شما می تونین برای سهولت هنوز بیشترتون فیلد های جدولتون رو کمتر کنین. استورد پروسیجرها رو هم به ساده ترین شکل ممکنش بدون کوچکترین پیچیدگی فعلا می نویسیم.

در پایگاه داده ای که دفعه ی پیش ساختیم به صورت زیر یک New Query باز می کنیم و پروسیجرمونو در اون تعریف و با کلید F5 یا تب Execute در پایگاه داده ی مورد نظرمون اجرا می کنیم که بعد از اجرا شما می تونید پروسیجرهای ساخته شده تون رو در قسمت Programmability/Stored Procedure ببینید.

اینم ساختار کلی نوشتن پروسیجر :

create proc [Procedure name]     (Your Fields That Will Define

as

begin

             -- What procedure will do

end 

Go

(شکل procedure_pb)procedure_pb

فایل متن استورد پروسیجرهای استفاده شده (با Save Target as... باز کنین.)

خوب حالا می ریم سراغ ویژوال استودیومون. یه سری تغییرات توی ظاهر فرممون ایجاد کردم که با دیدن تصویرش متوجه می شید.می دونین که این دلخواه ست. شما می تونید هر شکلی با هر تعداد دکمه (Button) یا تکست باکس(TextBox)و یا لیبل (Lable) و یا دیتا گرید ویو (DataGridView) - که این ابزار رو از قسمت Dataدر پنجره ی  TooltBoxهم می تونیم انتخاب کنیم- و ...روی فرمتون طراحی کنید و از روی Propertiesش تغییرات دلخواه تون رو ایجاد کنید که ربطی به کد نویسی نداره. قسمت اصلی کدهامون رو در دکمه ها می نویسیم که با کلیک کردن روشون و وارد شدن به ساختار کدِ ساخته شده توسط ویژوال استودیو می تونیم کارهایی که می خواییم اون دکمه ی مورد نظر انجام بده می نویسیم.در واقع همین جاست که از پروسیجرهامون استفاده می کنیم.

(شکل pb_Design) pb_Design

با توجه به شکل شما می تونید تغییرات دلخواه تون رو از طریق properties هر ابزار روش اعمال کنید مثلا نوشته های دیتا گریدتون فارسی باشه و چیدمانش از راست به چپ و ...

اما در مورد دیتا گرید، وقتی دیتا گرید رو اضافه می کنید خالیه و هیچ چیزی در اون مشاهده نمی شه.شما با استفاده از مربع کوچیکی که گوشه ی دیتا گرید هست و کلیک روی اون در قسمت DataGridView Tasks می تونید هم سورس تون رو انتخاب کنید(که اینجا من جدولمون رو انتخاب کردم که بعد از ایجاد کانکشن قابل مشاهده ست) و هم ویرایشش کنید از قسمت Edit Columns و کارهای دیگه اگر نیاز داشتید... و می بینید که بعد از این کار پایین فرموتون اتصالهاتون رو نشون می ده.

 

خوب وارد کدهامون می شیم .بالای کدها باید یک سری Using رو اضافه کنیم تا از کلاسها و متدهای مورد نیاز برای Sqlکه توی کتابخونه ی ویژوال استودیو قبلا قرار داده شده (.net frame work و  Dllیادتونه دیگه ) راحت استفاده کنیم: این 2 تا usingرو اضافه می کنیم:

using System.Data;

using System.Data.SqlClient;

 

(شکل Code1_pb)Code1_pb

 

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

 

SqlConnection con = new SqlConnection();

SqlCommand cmd = new SqlCommand();

SqlDataAdapter da = new SqlDataAdapter();

و

con.ConnectionString = "DataSource=(local);InitialCatalog=phone_book;Integrated Security=True";

con.Open();    //برای باز کردن و ورود به کانکشن و پایگاه داده مون

 

بعد یه تابع نیاز داریم که دیتا گریدمون رو بعد از هر تغییر اعمال شده پر کنه به نام FillGrid() که توی شکل کدش رو می بینین:

(شکل FillGrid)FillGrid

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

(شکل Insert) Insert

(شکل Delete) Delete

 

(شکل Update) Update

(شکل Close) Close

 

می بینین که ساختارها تقریبا مشابه هستن و تغییرات کوچیکی می خوان. البته این برنامه زیاد کامل و جامع نیست و صرفا برای آشنایی و شروع خوبه. من از NVarChar(50) استفاده کردم تا اسامی فارسی رو پشتیبانی کنه.بقیه کد هم که ساختار استفاده ش همون طوریه که می بینین.البته اگه دقت کنین موقع استفاده از هر متد و کلاس به خاطر پشتیبانی و هوشمند بودن ویژوال استودیو هم تایپ راحتتره و هم موارد استفاده و چگونگی استفاده از هر کلاس و متد و آبجکت و همه و همه در کنارش توضیح داده می شه که خودش راهنمایی خوبیه.

در انتها هم که طبق معمول Ctlr+F5 و اجرای برنامه.

می تونید برنامه م رو اصلاح یا کامل کنید؟؟!! پیشنهادی ندارید؟

پی نوشت: راز موفقیت علاوه بر تلاش و جستجو در پرسیدنه. بزرگترا چی می گن؟! می گن ندونستن عیب نیست، نپرسیدن عیبه. اگر جایی رو واضح نگفتم یا کم گفتم بپرسین لطفا.ممنونم.

 

+ نوشته شده در  پنجشنبه دهم بهمن 1387ساعت 14:30  توسط تبسم  | 

دفترچه ی تلفن (بخش اول، اتصال پایگاه داده به ویژوال استودیو)

 

قبل نوشت:برای وضوح بیشتر تصاویر اونها رو ، روی هاردتون ذخیره کنید و از اونجا بازشون کنید.

 

سلام.

حالا که تا حدودی با محیط کلی ویژوال استودیو آشنا شدین، برنامه ای رو می نویسیم که نیاز به استفاده از پایگاه داده ها داره و نحوه ی اتصال و کار با کلاس ها و متدهای پایگاه داده ای رو در ویژوال استودیو بررسی می کنیم.

مثال مون رو که برنامه ی یک دفترچه ی تلفنه شروع می کنیم. فعلا برای راحتی بیشتر فقط یک جدول (Table) توی پایگاه داده ی  SQL(من از ورژن  SQL Enterprise 2005 برای این مثال استفاده می کنم )، می سازیم و پایگاه داده مون رو به ویژوال استودیو مون متصل (Connect) می کنیم.

** شما می تونید از پایگاه داده ی اکسس (Access)، هم استفاده کنید. نحوه ی اتصال یا استفاده ی کدها فرقی ندارن. فقط از قسمت ها و متدها و کلاسهای مربوط به اکسس استفاده می کنیم همونطور که اگر پایگاه داده اوراکل (Oracle) باشه به همین صورته.

با توجه به شکل ها، در محیط SQL Server یک پایگاه داده جدید (New Database) می سازیم .من اینجا اسمش رو PhoneBook گذاشتم.

(شکل sql_pb1)sql_pb1

 

 

(شکل sql_pb2)sql_pb2

و بعد از ساخت دیتا بیس مون، در این پایگاه داده یک جدول جدید(New Table) می سازیم.

(شکل sql_pb3)sql_pb3

گزینه هایی رو که می خواییم توی دفترچه ی تلفنمون داشته باشیم و ذخیره کنیم، فیلدهای جدولمون رو می سازن. مثل نام و نام خانوادگی فرد، شماره های تلفن، فکس، آدرس ایمیل یا آدرس پستی اشخاص... و بعد جدولمون رو ذخیره (Save) می کنیم.

(شکل sql_pb4)sql_pb4

 

و اما...

فعلا کار ما با پایگاه داده تموم شده و کم کم می ریم سراغ ویژوال استودیو. از قسمت ایجاد پروژه(Create Project) یک Windows Forms Application در زبان #C ایجاد می کنم نام، مکان ذخیره پروژه و نام سولوشن رو مشخص می کنم و معلومه دیگه OK.

قبل از اینکه اتصال دیتابیس ی که ساختیم بگم روی فرممون با لیبل ها (Lable) و تکست باکس ها (TextBox) و دکمه های (Button) موجود در پنجره ی جعبه ی ابزار (ToolBox) دینگ دینگ ! : اینا رو در پست های قبلی معرفی کردم کما اینکه پیگیری عکس ها هم سریع تر کمکتون می کنه دفترچه ی تلفنمون رو طراحی می کنیم.

(شکل pb3)pb3

خوب فعلا این فرم رو با دکمه هایی که کاری نمی کنن همین جا داشته باشین تا بعد ...

**می ریم سراغ اتصال پایگاه داده مون. در واقع اتصال پایگاه داده به ویژوال استودیو امکان ذخیره سازی اطلاعاتمون رو در این برنامه ی ویژوال با امکانات گرافیکی و طراحی سریعتر و کاربرپسندترش می ده. این امکان که مثلا نام و نام خانوادگی و شماره ی فرد رو راحت توی برنامه ای که جلومون بازه و محیط گرافیکی قابل درکی داره وارد می کنی و فقط با زدن دکمه های دلخواهِ ت، اطلاعات و تغییرات مورد نظر در پشت صحنه توی پایگاه داده اعمال می شه بدون اینکه کاربر متوجه باشه. از طرفی برای حفظ امنیت اطلاعات و حدود دسترسی افراد هم کمک بزرگیه.

خوب با توجه به شکل زیر، از منوی Data ، گزینه ی Add New Data Source رو انتخاب می کنیم:

(شکل pb4)pb4

در پنجره ی باز شده  (Data Source Configuration Wizard) گزینه ی دیتا بیس (Database) رو انتخاب می کنیم و Next رو می زنیم..

(شکل pb5)pb5

در پنجره ی جدید گزینه ی (New Connection..) رو انتخاب می کنیم و در پنجره ی (Choose Data Source)، پایگاه داده مورد نظرمون رو که ممکنه SQL، Access و یا Oracle و ...باشه انتخاب می کنیم و ادامه می دیم (Continue)...

(شکل pb6)pb6

در پنجره ی Add Connection به انتخاب گزینه های 3 قسمت جدا شده در پنجره دقت کنید.مثلServer Name که (local) انتخابش کردم و یا انتخاب (Use Windows Authentication). می تونین گزینه ی پایینش رو هم انتخاب کنید که در اون صورت باید نام کاربری و پسورد رو هم بزنید.در قسمت آخر هم که نام پایگاه داده مون رو از لیست پایگاه داده های موجود که به خاطر (local) انتخاب کردن سرور، دیده می شن انتخاب می کنیم و تست کانکشن رو می زنیم...

(شکل pb7)pb7

بعد از ok  کردن، اطلاعات کانکشنمون رو می تونیم ببینیم:

(شکل pb8)pb8

به همین ترتیب Next  رو می زنیم و در پنجره ی جدید قسمت هایی از پایگاه داده مون رو که می خواییم در برنامه استفاده کنیم تیک می زنیم و ادامه...

(شکل pb9)pb9

و بعد Finish. و با پایان کار می تونید در پنجره ی Solution اطلاعات اضافه شده ی مربوط به اتصال پایگاه داده تون به برنامه رو مشاهده بفرمایید.

(شکل pb10)pb10

 

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

 

پی نوشت: راز موفقیت علاوه بر تلاش و جستجو در پرسیدنه. بزرگترا چی می گن؟! می گن ندونستن عیب نیست، نپرسیدن عیبه. اگر جایی رو واضح نگفتم یا کم گفتم بپرسین لطفا.ممنونم.

 

+ نوشته شده در  دوشنبه سی ام دی 1387ساعت 1:7  توسط تبسم  | 

آشنایی با محیط ویژوال استودیو دات نت (بخش سوم):

 

قبل نوشت:برای وضوح بیشتر تصاویر اونها رو ، روی هاردتون ذخیره کنید و از اونجا بازشون کنید.

 

در پست قبلی یک مثال در C# رو در قالب ِ (Windows Forms Application) بررسی کردیم. در ادامه ی برنامه های ویندوزی اون مثال رو در قالب ِ (Console Application) بررسی می کنیم. این قالب محیطی کدی است و صفحه ی گرافیکی و View Designerی نداریم.

(شکل CA1)CA1

و اینجا هم در Solution Explorer فایل های این قالب رو می بینیم. کدهای اصلی برنامه مونو در بخش Program.cs می نویسیم. با توجه به شکل زیر دستور مربوط به چاپ کلمات "Hello Word" را در قسمت    Mainبرنامه می نویسیم:

    static void Main(string[] args)

        {

            Console.WriteLine("Hello World");

        }

 

و بعد با کلید های (F5+ Ctrl) برنامه رو اجرا می کنیم و اجرای برنامه مونو در محیط Cmd (محیط ِ Dos ی) مشاهده می کنیم.

(شکل CA2)CA2

 

** همین طور که می بینید ویژوال استودیو محیط شگفت انگیز و با کارایی ای بالایی ِ که امکانات مختلف رو کنار هم براتون ارائه می کنه و به راحتی یک کلیک کردن شما محیط کد و Design و همینطور کامپایل و حتی Debug برنامه تونو یک جا دارین و می تونین استفاده کنین.

یکی از مهم ترین امکانات این نرم افزار، امکان ارتباط با پایگاه داده است.مثلا برای استفاده از پایگاه داده امکاناتی در گروه Data ازپنجره  Toolboxوجود دارد.اتصال پایگاه داده به نرم افزار هم ویزادی و راحته(منوی Data رو ببینین). در پست های بعدی این امکانات طبق مثالها بررسی می شه.

 

پی نوشت: راز موفقیت علاوه بر تلاش و جستجو در پرسیدنه. بزرگترا چی می گن؟! می گن ندونستن عیب نیست، نپرسیدن عیبه. اگر جایی رو واضح نگفتم یا کم گفتم بپرسین لطفا.ممنونم.

 

+ نوشته شده در  سه شنبه هفدهم دی 1387ساعت 1:29  توسط تبسم  | 

آشنایی با محیط ویژوال استودیو دات نت(بخش دوم) :

 

قبل نوشت:برای وضوح بیشتر تصاویر اونها رو ، روی هاردتون ذخیره کنید و از اونجا بازشون کنید.

 

در پست قبلی (بخش اول)، محیط ویژوال استودیو رو برای یک مثال وبی مشاهده و بررسی کردیم. در این قسمت وارد محیط ویندوزی این نرم افزار می شیم و ازدو تا از Templateهای ارائه شده توسط این نرم افزار استفاده می کنیم.(Template که یادتونه،وقتی پروژه ی جدیدی می سازیم (در صفحه ی Start Pageو بخش ِ Create) در پنجره ی باز شده ، اسم پروژه و زبان برنامه نویسی مونو و همینطور Template مورد نظرمونو انتخاب می کنیم.این پنجره، همون پنجره ی  New Project است. و Templateیا قالب در واقع امکانات محیط خاصی رو از ویژوال استودیو که مورد نیازمونه بهم می ده.).از اونجایی که من از ویژوال 2008  #C (ویرایش experess)  استفاده می کنم طبیعتا دیگه نیازی به انتخاب زبان نداریم .در شکل زیر این پنجره رو می تونین ببینید:

 

(شکل WFA1WFA1 

در شکل بالا، وارد قالب  (Windows Forms Application) می شیم و نام پروژه را انتخاب می کنیم.محیط کلی مثل مثال قبلمونه فقط یه سری تغییرات داریم. در این قالب ما فرمی رو داریم که می تونیم با استفاده از Toolbox و کلیک بر روی گزینه هایی که می خواییم مثلا یک دکمه(Button) و یک برچسب(Lable) روی فرممون ایجاد کنیم.و با استفاده از پنجره ی Properties تغییرات دلخواه و مورد نیازمون رو ایجاد می کنیم.

(شکل WFA2)WFA2

با کلیک بر روی هر کدوم از اشیایی که ساختیم مثل دکمه و راست کلیک کردن روی اون و رفتن به گزینه ی Properties و یا با توجه به شکل زیر می تونیم وارد مشخصات هر شی بشیم. مثلا در شکل زیر، Text مربوط به فرم رو Hello گذاشتم. و یا ماله لیبل رو خالی گذاشتم که اصلا دیده نمی شه (چون می خوام بعد از زدن کلید کلمات مورد نظرم جای لیبل نوشته بشه.) و یا ماله کلید رو که ok گذاشتم. می تونیم ID هر کدوم رو هم عوض کنیم.من توی این مثال پیش فرض های دیگه رو تغییر ندادم.(مثلا نام لیبل که همون (Lable1) هست.)

(شکل WFA3)WFA3

و اما با دو بار کلیک بر روی دکمه، وارد محیط کد برنامه مون، و کد مربوط به فشرده شدن دکمه می شیم و در این قسمت دستور لازم مثلا برای چاپ کلماتی که می خواییم با زدن دکمه ایجاد بشن رو تایپ می کنیم:

private void button1_Click(object sender, EventArgs e)

        {

            label1.Text = " Hello World";

        }

(شکل WFA4)WFA4

و بعد با زدن کلید های (F5 + Ctlr)برنامه را اجرا می کنیم. و با لود شدن فرم و زدن دکمه ی ok، کلمات مورد نظرمون روی لیبلی که گذاشته بودیم، نمایش داده می شن. و بعدم که ذخیره ی پروژه و فعلا خسته نباشید.

 

توجه: در این شکل ها پنجره ی Solution Explorer باز نیست اما دقت کنین که همونطور که در پست قبلی گفتم از منوی Viewشما می تونین بیاریدش. و با تب های View Code و یا View Designer می تونین بین صفحه هات کد و گرافیک راحت جا به جا بشین. اطلاعات مربوط به هر Solutionبا پسوند Sln در پوشه ی پروژه ی شما ذخیره می شه.

 

پی نوشت: راز موفقیت علاوه بر تلاش و جستجو در پرسیدنه. بزرگترا چی می گن؟! می گن ندونستن عیب نیست، نپرسیدن عیبه. اگر جایی رو واضح نگفتم یا کم گفتم بپرسین لطفا.ممنونم.

 

+ نوشته شده در  دوشنبه شانزدهم دی 1387ساعت 12:43  توسط تبسم  | 

آشنایی با محیط ویژوال استودیو دات نت(بخش اول):

 

قبل نوشت:برای وضوح بیشتر تصاویر اونها رو ، روی هاردتون ذخیره کنید و از اونجا بازشون کنید.

 

بعد از آشنایی با اینکه نرم افزار ویژوال استودیو برای چه کاربردهایی طراحی شد به بررسی محیط این نرم افزار می رسیم و با صفحه های مختلفش آشنا می شیم، این صفحه ها رو با یک مثال براتون نشون می دم و برای این کار از ویژوال استودیو 2008(Express Edition) استفاده می کنم:

در این پست مثالمون  که برنامه ی چاپ کلمات "Hello World" است رو در ASP.net  و

  Visual Web Developer2008 و با زبان #C بررسی می کنیم:

بعد از نصب ویژوال استودیو و اولین دفعه از لود شدن اون برای باز شدن، صفحه ی زیر رو مشاهده می کنید:

(شکلVS1)VS1

در این صفحه، که در تب Start Page (بالا سمت چپ)است، می تونیم پروژه های قبلی کار شده در این نرم افزار را مشاهده کنیم. همچنین می تونیم از قسمت Open و Create (درونه بیضی) با کلیک بر روی        ...Web Site  پروژه ای را باز کنیم یا پروژه ی جدیدی بسازیم.

با توجه به عکس زیر، برای ساختن یه پروژه ی جدید با باز شدن صفحه ی New Web Site ، موارد زیر را باید انتخاب و تنظیم کنیم:

-          Visual Stadio Installed Templates (برای این مثال همانطور که در شکل مشاهده می کنید ASP.NET Web Site رو انتخاب می کنیم. )

-          Locatian (جاییه که می خوایین پروژه تون دخیره بشه،که توسط دکمه Browse قادر به تغییر مکانش هستید.)

-          Language (زبان برنامه نویسی ای که دوست دارین از Syntax و امکاناتش استفاده کنین رو از اینجا انتخاب می کنین که برای مثال هامون ما از C# استفاده می کنیم.)

(شکلVS3)VS3

و اما بعد از ok کردن وارد دنیای ویژوال استودیو می شیم...

(شکلVS4-4) VS4-4

همونطور که در شکل،گوشه ی سمت راست بالا،داخل بیضی می بینید، تبی داریم به نام Solution Explorer که به صورت درختی ای تمامی صفحه هات مربوط به پروژه ی شما را در برخواهد داشت و به راحتی با کلیک بر روی هر گزینه وارد صفحه ی مربوط به آن می شید. در شکل بالا در صفحه ی Default.aspx هستیم که حاوی کد های Html برنامه است. (وجود علامت * در گوشه ی نام فایل - داخل بیضی سمت چپ- به معنی ذخیره نشدن تغییرات اعمال شده است،با کلیدهای Ctrl + S فایل ذخیره شده و علامت از بین می ره.)

(شکلVS5)VS5

در این شکل بالا فایل Web Config را که شامل کد XML است مشاهده می کنید. در این قسمت می تونیم در صورت نیاز تغییرات لازم را روی کد های XMLخود ایجاد کنیم.(XML ، استانداردی فراگير و مورد پذيرش تمامی محيط های پياده سازی  است. اغلب سرويس گيرندگان مدرن، نظير سيستم های عامل کامپيوتر ، تلفن های سلولی ، دستگاههای PDA ، کنسول های بازی ، قادر به دريافت داده های مبتنی بر  XML ، می باشند .)

(شکلVS6)VS6

و اما در این شکل فایل Defualt.aspx.cs را مشاهده می کنید که زیر مجموعه ای از Defualt.aspx است و حاوی کد های اصلی برنامه به زبان C# است. با کلیک بر روی گزینه ی View Designer در تب Solution Explorer (نحوه ی دسترسی: منوی View> گزینه ی Toolbars>View Designer) وارد محیط گرافیکی کد مورد نظرمون می شیم مانند تصویر زیر:

(شکلVS7)VS7

در این شکل شما یکی از مهم ترین پنجره های ویژوال استودیو رو به نام ToolBox (که در منوی Viewنیز می تونین پیداش کنین) در سمت چپ می بینید. این پنجره دارای دسته بندی های مختلفه که بر اساس نیاز هر دسته کاربردهای زیادی دارن علی الخصوص در سهولت کار در این محیط مجتمع ِ ویژوال. با توجه به تصویر ما یک دکمه (Botton) رو با دوبار کلیک بر روی همین گزینه در دسته ی استاندارد از Toolbox روی صفحه مون می سازیم.

(شکلVS8)VS8

با توجه به شکل می تونیم تغییرات دلخواه مون (از جمله نام دکمه،متن نوشته شونده روی دکمه، رنگ و سایز و ...) رو روی دکمه ای که ساختیم با کمک پنجره ی Properties اعمال کنیم.(نحوه ی دسترسی: گزینه ی View > Properties Window  و یا کلید میانبر4  Fو یا تب properties در Solution Explorer).

(شکلVS9)VS9

و اما با دو بار کلیک بر روی دکمه به صفحه ی کد و قسمت مربوط به کد دکمه هدایت می شیم. اینجا می تونیم دستوراتی رو بنویسم مبنی بر اینکه وقتی دکمه کلیک می شه چه کاری انجام بشه.

protected void Button1_Click(object sender, EventArgs e)

    {

        Response.Write("Hello World");

    }  

تایپ دستور یک خطی بالا، به این معنیه که بعد از فشرده شدن دکمه، کلمات "Hello World" نمایش داده بشن.

(شکلVS10)VS10

و اما در شکل بالا شما نتیجه ی کارتون رو با زدن کلید های (Ctrl + F5) مشاهده می کنید و با زدن دکمه ی ok در صفحه ی اجرا شده کلمات مورد نظر تایپ می شن.

بدیهیه با ذخیره ی پروژه از طریق منوی فایل می تونین از محیط خارج شین.

            

پی نوشت: راز موفقیت علاوه بر تلاش و جستجو در پرسیدنه. بزرگترا چی می گن؟! می گن ندونستن عیب نیست، نپرسیدن عیبه. اگر جایی رو واضح نگفتم یا کم گفتم بپرسین لطفا.ممنونم.

 

 

+ نوشته شده در  دوشنبه شانزدهم دی 1387ساعت 2:53  توسط تبسم  | 

پله ی دوم (نرم افزاری به نام ویژوال استودیو)

 

 

ویژوال استودیو (Visual Studio ) چیست؟

در سال 1997 اولین نسخه از ويژوال استوديو توسط شرکت مایکروسافت به بازار آمد و به نام Visual Studio 97 مشهور شد و این اولين تلاش شركت مايكروسافت در توليد محيط توليد نرم‌افزاري براي ساختن برنامه‌هايي با زبان‌هاي متفاوت بود. ( توسعه محیط چند زبانه ). تمرکز اصلی این نرم افزار از اولین نسخه های آن تا کنون بر روی خصوصیت IDE بودن آن است که به برنامه نویس اجازه میدهد تا برنامه های کاربردی مستقل ، وب سایت ، برنامه های کاربردی وب و یا سرویس های وب را که بر روی تعدادی از Plat Form های پشتیبانی شده توسط Microsoft .NET Framework ( البته برای تمام نسخه های بعد از ویژوال استودیو 6 )  و همچنین Platform هایی مانند Microsoft Windows servers and workstations , PocketPC Smartphones و World Wide Web browsers اجرا میشوند را براحتی ایجاد نماید .

 در حقیقت هدف اصلی و دراز مدت مایکروسافت متحد کردن ابزارهای برنامه نویسی تحت یک محیط واحد با در دسترس بودن ابزار و امکانات برنامه نویسی ِ آسانتر و با کارایی بهتر برای برنامه نویس بوده است. در حقیقت یکی از بزرگترین ایرادهای ASP کلاسیک نداشتن یک محیط ویژوال بوده است که با تولد ویژوال استودیو این مسئله حل گردید.

 

تاریخچه ی Visual Studio و ورود آن به دنیای دات نت با   Visual Studio.netو سیر تکاملی آن:

يك سال پس از ارائه نسخه Visual Studio 97 (یعنی در سال 1998 )، نسخه 6 Visual Studio بعنوان آخرین نسخه ای که مي‌توانست در پلتفرم Win9x اجرا شود ، به بازارعرضه شد . از سال 98 تا سال 2002 مایکروسافت نسخه جدیدی از ویژوال استودیو را معرفی نکرد و ورژن تمام فایل های داخلی (File Format Internal) آن طی این 4 سال به ورژن 6 ارتقاء یافت که بهمین دلیل Visual Studio 98 را با نام Visual Studio 6 نام گذاری نمودند . این آخرین نسخه ای بود که شامل ویژوال بیسیک معروف و دوست داشتنی و ویژوال J++ بود . نسخه های بعدی ویژوال بیسیک کاملا متفاوت از نسخه کلاسیک آن شدند و جزء زبانهای دات نتی قرار گرفتند . در حقیقت این نسخه نسبت به نسخه ویژوال استادیو 97 ، چند محیط اضافه تر نیز داشت .

ظهور ویژوال استودیو دات نت  (معرفی نسخه های به بازار آمده Visual Studio.net) :

  • Visual Studio.Net 2002

مایکروسافت در سال 2002 نسخه تحت .NET Framework كه مقدمه‌اي بود بر محیط توسعه كدهاي مديريت شده را با نام ("Visual Studio 2002 .NET، (codenamed "Rainier معرفي نمود . البته نسخه Beta آن در سال 2001 بر روی Microsoft developer network ارائه شده بود . فرق اين برنامه در اين بود كه برنامه‌هایی مانند زبان ++C مستقيماً به زبان ماشين، كامپايل نمي‌شدند و به صورت MSIL (يا CIL) در مي‌آمدند. هنگامی که یک application به زبان MSIL اجرا میشد ، در زمان اجرا به زبان ماشین متناسب با platform ای که بر روی آن در حال اجرا بود کامپایل میشد ، که این امکان قابل انتقال بودن کد میان چندین platform را فراهم میکرد . برنامه ها به زبان MSIL کامپایل شده و میتوانستند بر روی platform ای که بر روی آن Common Language Infrastructure پیاده سازی شده بود (نصب شده بود) اجرا شوند . برنامه ها ی ترجمه شده به MSIL امکان اجرا بر روی Linux یا Mac OS X را با استفاده از پیاده سازی ابزارهای مانند Mono و DotGNU که non-Microsoft .NET بودند را داشتند . Visual Studio.Net 2002 اولين نسخه از اين نرم‌افزار بود كه حتماً بايد روي ويندوز NT اجرا مي‌شد. در اين نسخه، زبان قدرتمند سي‌شارپ پا به عرصه گذاشت. همچنين زبان ديگري به نام جي شارپ (#J) كه از Syntaxهاي جاوا استفاده مي‌كرد نيز در اين بسته عرضه شد.

  • Visual Studio.Net 2003:

مایکروسافت در سال 2003 پس از کمی تغییر روی نسخه 2002، نسخه جديد ويژوال استوديو 2003 را معرفی کرد كه NET Framework. جديدتري داشت . Codename  آن Everett بود و شامل نسخه upgrade شده ای از NET Framework. با version 1.1 بود . این نسخه همچنین شامل پشتیبانی از توسعه برنامه های Mobile Devices(برنامه نویسی موبایل) با استفاده از هر دو امکان .Net Compact Framework و Asp.Net بود . کامپایلر ++Visual C نیز برای سازگاری و مطابقت با استانداردها بویژه در محیط partial template specialization اصلاح شده بود . Visual C++ Toolkit 2003 که یک نسخه رایگان و شبیه به کامپایلر ++ Cبود همراه با ویژوال استودیو 2003 عرضه گردید که البته طولی نکشید با Express Editions جایگزین شد . ویژوال استودیو 2003 در 4 ویرایش مختلف ارائه گردید :  

Academic, Professional, Enterprise Developer and  Enterprise Architect                                                                                                                                                            ویرایش Enterprise Architect آن شامل پیاده سازی Microsoft Visio بر اساس تکنولوژی مدل سازی بود که بیشترین تمرکزش بر روی ساخت نمایش ویژوالی معماری برنامه های کاربردی بر مبنای Unified Modeling Language است . همچنین Enterprise Templates برای کمک به تیم های بزرگ توسعه برنامه جهت استاندارد و یکنواخت کردن شیوه برنامه نویسی معرفی گردید . مایکروسافت Service Pack 1را برای Visual Studio 2003 در September 13, 2006 ارائه نمود . شماره ورژن داخلی Visual Studio 2003 ، version 7.1 است در حالی که file format version آن 8میباشد . (منظور شماره نسخه ابزارهای برنامه نویسی از قبیل VB.NET میباشد که به نسخه 8 رسیده بودند.)

  • Visual Studio 2005:

نسخه ی 2005 دارای دو تفاوت عمده با نسخه ی 2003 است.

اول در فریم ورک (Frame work) که از نسخه ی 1.1 به 2.0 تغییر کرد اما این مسئله زیاد به چشم نمی آید در واقع چیزی که به چشم می آد منسوخ شدن بعضی از فضاهای اسمی و به وجود آمدن فضای اسمی جدید (برای مثال system.net.mail جایگزین system.web.mail شده است.)

دوم در محیط کاری که نسخه ی 2005 خیلی پیشرفت کرده و در واقع کاربرپسندتر شده است. (مثلا در طراحی Interface برنامه.)

  • Visual Studio 2008:

اکنون نسخه ویژوال استودیو ۲۰۰۸ مدتی است که ارائه شده است. Visual Studio 2008  که code-named آن Orcas می باشد، جانشین مناسبی برای Visual Studio2005  است که بالاخره مایکروسافت پس از ۳ سال از عرضه نسخه ۲۰۰۵، آنرا در ۲۷ فوریه ۲۰۰۸ ارائه نمود.

*       بیشتر توجه Visual Studio 2008 ، تولید و توسعه برنامه‌های تحت ویندوز ویستا، سیستم‌های آفیس 2007 و برنامه‌های تحت وب است. بنا به گفته مایکروسافت به‌طور کلی ویژوال استودیو ۲۰۰۸ دارای سه ویژگی برجسته اصلی است:

: Rapid Application Development *1 برای کمک به توسعه دهندگان برای ساخت نرم افزارهای مدرن با سرعت بالا، Visual Studio 2008  زبان‌ها و ابزارهای کار با داده را بهبود و ارتقاء داد. (مثال : LINQ که به نسخه‌ِ جدید زبانهای #C و Visual Basic اضافه شده‌است. تکنولوژی LINQ به کمک آندسته از برنامه نویسانی که سر و کار زیادی با کارکردن با داده‌های جدول گونه دارند، آمده‌است. از این پس برنامه نویسان می‌توانند به کمک LINQ آنگونه که به نوشتن Query code‌ها در محیط‌های SQL و غیره می‌پرداختند، در سورس کد برنامه خود و تحت NET. براحتی از مزایای آن استفاده کنند. زبان LINQ دارای ساختاری شبیه به زبان SQL می‌باشد. LINQ به ما اجازه می‌دهد که با زبان‌های VBو #C کوئری‌های خود را بنویسیم. LINQ در VS ۲۰۰۸ به طور کامل توسط IntelliSense پشتیبانی می‌شود.)

همچنین امکان انتخاب چندین نسخه متفاوت از.NET Framework را در محیط Visual Studio 2008   فراهم آورده تا در یک محیط بتوان از تعداد زیادی از پروژه‌ها (قدیمی و جدید) پشتیبانی نموده و با آنها کار کرد.

  Visual Studio 2008   :  Effective Team Collaboration * 2 بگونه‌ای توسعه و بهبود یافته که بصورت کامل همکاری در تیم‌های توسعه را بهبود میبخشد. بطوری که شامل ابزارهایی برای کمک به اجتماع حرفه‌ای‌های database و طراحان graphic در یک پروژه میباشد.

 Break Through User Experience  *3      ویژوال استودیو ۲۰۰۸به توسعه دهندگان(طراحان) نرم افزار، ابزارهای جدیدی که سرعت ساخت برنامه‌های مرتبط به پلت فرم‌های جدید مانند : WEB، Windows Vista، Office ۲۰۰۷، SQL Server ۲۰۰۸ و Windows Server ۲۰۰۸ را میدهد را ارئه نموده‌است. بعنوان مثال برای WEB، ASP.NET AJAX را ارائه نموده‌است.

*    در Visual Studio 2008   نسخه ۳NET Framework. به نسخه ۳٫۵.NET Framework ارتقاء یافته‌است. ۳٫۵.NET Framework تغییراتی را بر روی۳.NET Framework ایجاد نمود که میتوان به افزایش base class library (کتابخانه‌های پایه در دات نت) و ارتقاء امکاناتی از فبیل : WF، WCF، WPF و Windows CardSpace را نام برد.

*      WPF از دیگر قابلیت‌های ۲۰۰۸  Visual Studio  که به برنامه نویسان امکان ساخت و تجربه برنامه نویسی application‌ها را بر پایه ساختار Windows Vista را میدهد.

*       از دیگر قابلیت‌های۲۰۰۸ Visual Studio  می‌توان به WF اشاره نمود که مدل، اسباب و ابزارهای برنامه نویسی را برای سرعت بخشیدن به جریان کار یک برنامه کاربردی تحت ویندوز را فراهم میکند.

*       با استفاده از ویژوال استودیو ۲۰۰۸ ابزارهای متنوعی در اختیار برنامه‌نویسان قرار می‌گیرد که می‌توان با استفاده از آن ابزارها، برنامه‌های تحت وب و ویندوز را به راحتی تولید کرد. یکی از ابزارهای مفید که در این نسخه معرفی شده‌است VSTO یا Visual Studio Tools for Office است که در ویرایش حرفه‌ای این نسخه وجود دارد. با استفاده از VSTO می‌توان برنامه‌های آفیس ۲۰۰۷، مانند Outlook یا owerPoint را شخصی‌سازی کرد.

*      یکی دیگر از قابلیت‌های ویژوال استودیو ۲۰۰۸ امکان انتخاب فریم‌ورک‌های مختلف است.در نسخه‌های قبلی، تنها امکان استفاده از یک فریم‌ ورک وجود داشت، در این نسخه می‌توانید فریم‌ورک‌های مختلف را انتخاب کنید.این بدین معناست که شما می‌توانید براحتی برنامه‌های فعلی خود را که برپایه NET ۲٫۰. بوده و در حال حاضر در محیط Visual Studio ۲۰۰۵ به توسعه آن می‌پردازید بدون هیچ تغییری در محیط Visual Studio ۲۰۰۸ آن را پیاده کرده و از مزایا IDE و کامپایلر جدید آن بهره مند شوید و پروژه یا برنامه خود را همچنان بر پایه NET ۲٫۰. اما در محیطی پیشرفته تر توسعه دهید.

*      در ویژوال استودیو ۲۰۰۸ امکان دیدن Split view وجود دارد که به برنامه‌نویسان اجازه می‌دهد سورس‌کدهای HTML را به همراه طرح صفحه (Design view) همزمان مشاهده کنند (کاربرانی که با نرم افزارهایی مانند Front Page و یا Dream Viewer کار کرده باشند با Split view آشنایی دارند.)

*      و و ...

  • ویژوال استودیو 2010 و دات نت فریم ورک 4.0 در راه...

کنفرانس PDC 2008 لس آنجلس دست آوردهای زیادی را به دنبال داشت و همان طور که انتظار می رفت با برگزاری آن جزئیات بیشتری در رابطه با تکنولوژی های جدید مایکروسافت مشخص شده است. یکی از این موارد ارائه شدن اولین پیش نمایش ویژوال استودیو 2010 و دات نت فریم ورک 4.0 می باشد.
شرکت مایکروسافت به توسعه دهندگان وعده داده است که ویژوال استودیوی جدید با ارائه مدرن ترین و جدیدترین امکانات  برنامه نویسی و کار با داده ها تحول عظیمی در روند توسعه و کدنویسی به وجود خواهد آورد. از جمله این ویژگی ها می توان از Democratizing Application Lifecycle Management, Enabling emerging trends, Inspiring developer delight و Riding the next generation platform wave نام برد.

 

اندرو هلزبرگ (Anders Hejlsberg)کیست؟

یکی از اولین کارمندان شرکت بورلند(Borland) که یکی از توسعه دهندگان توربو پاسکال و بعد از آن طراح زبان برنامه نویسی است که در سال 1996 بورلند را ترک و به مایکروسافت پیوست. از اولین پروژه هایش در مایکروسافت می توان زبان برنامه نویسی j++  و WFC) Windows Foundation Classes )را نام برد. از سال 2000 طراح و سرپرست تیم زبان برنامه نویسی #C  است و همچنین نقش کلیدی ای در ایجاد مایکروسافت دات نت فریم ورک دارد.

 

با Visual Studio.net واقعا چه کارهایی میتوان انجام داد؟

در زیر تعدادی از کاربردهایی را که برای تولید آنها میتوان از Visual Studio استفاده نمود معرفی گردیده اند  :

*     Console applications : این کاربرد برای اجرای خطوط دستور البته بدون محیط گرافیکی استفاده میشود که از این کاربرد برای برخی از ابزارهای کوچک یا برای اجرا شدن کدها توسط دیگر کاربرها استفاده میشود .

*       Windows forms applications : برای برنامه های کاربردی ویندوزی که با استفاده از .NET frameworkنوشته میشوند .

*        Windows services : سرویس ها برنامه های کاربردی هستند که در پس زمینه ویندوز اجرا میشوند . 

*       ASP.NET applications   یک تکنولوژی قدرتمند که برای طراحی و ساخت صفحات وب پویا استفاده میشود .

*     web services   :  مدل سرویسهای وب را بطور کامل فراهم نموده تا شما براحتی و با سرعت سرویسهای وب را تولید نمایید .

*        Windows Mobile applications : که میتواند بر روی ابزارهایی که شامل framework هستند مانند Pocket PC ها و همچنین cell phones هایی که پلت فرم Microsoft Smartphone بر روی آنها اجرا میشود ، اجرا گردد.

*        Visual Studio add-ins : شما میتوانید از خود ویژوال استودیو برای ساخت توابعی جدید و قابل اضافه شدن به خود ویژوال استودیو استفاده نمایید .

*      کاربردهای دیگر  : ویژوال استودیو همچنین شامل پروژه هایی برای توسعه برنامه های کاربردی شما ، کار با databases ، ساخت گزارشها و ... میباشد .

برخی دیگر از ویژگی های ویژوال استودیو دات نت(VS.net):

  • ادیتور متنی VS برای تمام زبانهایی که VS پشتیبانی می کند (مانند #C) مناسب می باشد. بنابراین می تواند تمام خطاها را در برنامه کشف کند و زمانی که در حال تایپ کردن کدها هستیم، کد مناسب را پیشنهاد می دهد.
  • VS به طراحان برنامه های ویندوز فرم و وب فرم اجازه می دهد تا بتوانند به آسانی ابزار مورد نیاز خود را از یک جعبه به صورت drag-and-drop بر روی صفحه بیاورند.
  • VS تمام مراحل مورد نیاز برای کامپایل کردن کد را به صورت خودکار در آورده است. با این حال در بعضی مواقع این اجازه را هم به برنامه نویس می دهد که بر روی آن کنترل کامل داشته باشد.
  • VS دارای ابزار قدرتمندی برای دیدن عناصر پروژه های ما و حرکت کردن در بین آنها است، خواه این عناصر فایلهای کد #C ، یا منابع دیگر مانند عکسهای bitmap یا فایلهای صوتی باشند.
  • VS  شامل ویزاردهایی است که کارهای معمولی را به صورت خودکار در آورده است که بیشتر آنها می توانند کدهای مناسب را بدون نگرانی برنامه نویس به فایلهای موجود اضافه کنند.

 

VS(Visual Studio) Solution چیست؟

هنگامی که از VS برای ایجاد برنامه هایمان استفاده می کنیم، در واقع می توانیم بگوییم که Solution (سولوشن) ایجاد کرده ایم. معنی یک Solution در VS چیزی بیشتر از یک برنامه است. Solutionها در بردارنده ی یک یا چندین پروژه هستند که ممکن است شامل پروژه های ویندوز فرم، پروژه های وب فرم و غیره باشند.

 

 

 

 

 

+ نوشته شده در  چهارشنبه یازدهم دی 1387ساعت 2:27  توسط تبسم  | 

پله ی اول (اساسن دات نت چیه؟)

 

با پیدایش اینترنت و رشد سریع استفاده و کاربرد اون، مسئله ی طراحی و توسعه ی سایت هایی برای ارتباطات بهتر مطرح بوده و فناوریهای مختلفی یکی پس از دیگری برای رفع این نیاز ارائه شدن.اوایل از صفحات Html ایستا (Static) استفاده می شد .اما رفته رفته نیاز به سایت های پویا و نقش زمان در اونها و همچنین رشد تکنولوژی های چند رسانه ای مثل "Flash" این صنعت رو به سمت پویایی سوق داد. برای رفع این نیاز شرکت مایکروسافت برای راحتی کاربران ASP يا Active Server Page رو ایجاد کرد که علاوه بر پویایی، کارها رو آسونتر کرد اما هنوز این فناوری شئ گرا نبود. به علاوه از امنیت کافی هم برخوردار نبود و در محیط های بازرگانی با حجم بالا قوی عمل نمی کرد و تبدیل کدها در گیرنده و فرستنده هم خیلی راحت نبود و سرعت خیلی بالایی هم نداشت .

برای از بین بردن این مشکلات و افزودن یک سری ویژگی ها جدید و البته از نقطه نظر تجاری برای مایکروسافت به منظور تسلط بر بازارهاي ديگر به جز بازار سيستمهاي عامل دسکتاپ كه شامل محيطهاي وب و برنامه نويسي غير دسكتاپ مانند برنامه نويبسي بر روي موبايلها و Pocket Pc هاست، این شرکت در تابستان 2000 ، دات نت رو عرضه کرد (  ASP.net عضوی از بدنه ی دات نت). دات نت صرفا یک محصول و ابزار برنامه نویسی نیست بلکه یک پلتفرم است که به شما امکان تولید نرم افزار های تحت ویندوز،تحت وب،برنامه نویسی موبایل،و خیلی موارد دیگه رو میده.تکنولوژی دات نت کاملا شیء گرا ست و این خیلی قابلیت های وحشتناک عالی به برنامه نویس میده.توی این پلتفرم، زبان برنامه نویسی شما خیلی اهمیت و تفاوت خاصی نمیکنه چرا که تمام کدهای نوشته شده توسط برنامه نویس هنگام کامپایل به CLR (Common Language Runtime) که برای دات نت قابل فهم هست و بعد از اون به IL (Inermediate Language( که برای ماشین زبان قابل فهمی هست ترجمه میشه.نتیجتا خیلی فرقی نمیکنه که شما برنامه یا وب سایتی رو با چه زبانی در دات نت تولید کنید چرا که تمام زبانهای دات نت از یک کتابخانه کلاس واحد (FrameWork Class Library) استفاده میکنن و در نهایت هم به زبان IL که تقریبا زبان اسمبلی هست ترجمه میشن.

** NGWS (New Generation Windows Services )  در حقيقت نام ابتدايي .net است . به معني نسل بعدي سرويسهاي ويندوز .پيش از خبر رساني رسمي درباره .net از عبارت NGWS برای پروژه جدید مایکروسافت استفاده میشد.

مروری بر ویژگی ها و برتری های .net :

  1. دات نت، پلت فرمی جدید بمنظور پیاده سازی و بکارگیری برنامه های مدیریت یافته، شئ گرا و پیشرفته است.

2.       يکی از برتری‎های .net  اين است که شما می توانيد از چندين زبان برنامه نويسی در يک برنامه استفاده نمائيد. حسن اين قابليت حداقل در اين است که افراد تيم برنامه نويسی شما مجبور نيستند که همگی تنها يک زبان را بدانند و شما هم بهتر و زودتر می توانيد تيم خود را تشکيل دهيد.   

چند زبانه بودن به اين معنی است كه ما می توانيم قسمتهای مختلف يك برنامه را به زبانهای مختلف بنويسيم و آنها بدون هيچ مشكلی در كنار هم كار كنند. در.net  بدليل استفاده زبانها از كتابخانه كلاس  .net تفاوت آنها فقط در نحوه نوشتاری دستورات می باشد مثلا زبان C#.net هيچ برتری خاصی نسبت به VB.NET ندارد و انتخاب بين يكی از اين زبانها به سليقه و علاقه برنامه نويس بستگی دارد

 

  1.  بدنه net. دارای بيش از ۴۵۰۰ کلاس آماده جهت استفاده در ASP.net است. اين کلاس ها تقريبا هر نيازی را در برنامه نويسی برآورده می کنند.
  2. دات نت امکانات یک زبان شئ گرا را برای برنامه نویس فراهم می کند از جمله وراثت.
  3. ASP.net یک الگوی برنامه نویسی مستقل از مرورگر(browser) است. این به این معنی است که عده ی زیادی از کاربران اینترنت، بدون نیاز به اینکه کد خاصی برای مرورگر بنویسیدمی توانند از برنامه های کاربردی وبتان استفاده کنند.
  4. کلاس های ADO.net (که واسطی ست برای ذخیره و بازیابی به داده ها) مربوط به دات نت، یک معماری جدید غیر متصل برای دستیابی به داده از طریق اینترنت را ارائه می نماید.
  5. دات نت امکان ایجاد سرویس های وب XML مستقل از پلت فرم را با استفاده از استاندارد های Simple Object Access Protocol   (SOAP) و Web Service Description Langauge (WSDL) ارائه می نماید.

8.       داشتن رابط گرافيکی خوب اينترنتي و ابزار های مختلف و تعریف شده که محیطی با راحتی و سادگی هر چه تمام تر را برای برنامه کاربر ها و برنامه نویس ها فراهم کرده است.

9.       انتقال ساده به سيستم های ديگر: در.net  براحتی می توان برنامه ها را با يک کپی ساده به کامپيوتر های ديگر انتقال داد .

10.   پشتيبانی از زبانهای مختلف : دات نت مستقل از نوع زبانهای برنامه نویسی است. در حال حاضر از زبانهای C++.net  و C# .net  و VB.net و Jscript.net و COBOL و Perl و Python  و Eiffel و APL پشتیبانی می کند. دات نت از این زبانها مستقیما حمایت نمی کند.در حقیقت دات نت صرفا قادر به درک یک زبان بیشتر نیست.زبان فوق ، زبان میانی مایکروسافت(Microsoft Intermediate: IL) نامیده می شود.

11.   Platform های آينده: هم اکنون .netبرای ويندوز نوشته شده است ولی در آينده نزديک نسخه های Unix و Linux و همچنين برای Mobile و PDA نيز ارائه خواهد شد . اين امر اين امکان را می دهد که برنامه ای که برای ويندوز در .net نوشته ايد در تمامی سيستم عامل ها و دستگاه های بالا قابل اجرا باشد.

  1. دات نت یک تکنولوژی هم Web Base  و هم Windows Base  است. در واقع علاوه بر تولید سایت های اینترنتی و مشتمل بر وب، برای تولید نرم افزارهای کاربردی در ویندوز نیز مورد استفاده قرار می گیرد.
  2.  ...

 

**  IIS چیست؟

پر کابردترین جزء IIS(Internet Information service)   .net است که يك سرويس دهنده وب نرم افزاری است كه مديريت صفحات وب را برعهده گرفته و آنها را برای سرويس گيرندگان مجهز به مرورگرها قابل دستيابی و استفاده می نمايد. تاكنون سرويس دهنده های وب متعددی طراحی و به بازار عرضه شده است Apache . و  IIS نمونه هائی از اين نوع نرم افزارها هستند. يكی از سرويس دهندگان وبی كه ASP.NET بر روی آن اجرا می گردد، IIS متعلق به شركت مايكروسافت است.

 

.Net Framework چیست؟؟

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

Framework  مجموعه ای از فایل های مورد نیاز سیستم عامل (شامل فایل های DLL ، رجیستری و واسطه های استاندارد ارتباط برنامه ها با یکدیگر) است که برای اجرای برنامه های نوشته شده تحت دات نت صروری می باشد.

در واقع  .NET Frameworkزير بناي اصلي پلتفرم .net است  و موتوري است كه برنامه هاي وب و ويندوز نوشته شده تحت پلتفرم .net زير نظر آن اجرا ميشوند.
  .NET Framework شامل "كتابخانه عمومي كلاس ها" ميباشد به عنوان مثال كلاسهاي پایه ای مانند  ADO.net و ASP.net و WindowsForm همه در   .NET Framework قرار دارد. اين مسئله باعث ميشود كه برنامه نوشته شده در .net مستقل از سيستم عامل باشد و فقط به .NET Framework براي اجرا نياز داشته باشد.

.NET Framework مشخص می کند که برنامه های کاربردی به هر زبان برنامه نویسی که  CLR(Common Language Runtime) پشتیبانی می کند می توانند نوشته شوند. و CLR، هر برنامه کاربردی تحت خود را به زبان میانی (IL) تبدیل می کند.

** CLR  زیر ساختار NET.

قلب NET Framework. همان CLR يا Common Language Runtime می باشد  CLR مسئول اجرای فايل ها ، فراخوانی آنها به حافظه و کامپايل کردن آنها به زبان MSIL يا Microsoft Intermediate Language است . بعدا ً کدهای IL در هنگام اجرا، بوسيله برنامه کامپايلر just-in-time به زبان ماشين تبديل می شود . اين بدين معناست که در NET. دو مرحله برای کامپايل شدن وجود دارد . اولين مرحله وقتی است که برنامه به هر زبان NET. که باشد به IL کامپايل می شود که اين کد کامپايل شده به IL قابليت پخش در تمام NET Framework. را دارد و بستگی به سيستم عامل ندارد . مرحله دوم زمان اجرا است که کامپايلر just-in-time کد IL را به زبان آن ماشينی که برنامه در آن می خواهد اجرا شود کامپايل می کند. CLR . عهده دار برنامه نويسی شی گرا در سطح زبان های NET. است ، برای مثال شما می توانيد يک object در سی شارپ داشته باشيد و آن را در ويژوال بيسيک فرا بخوانيد و همچنين بوسيله وراثت تغييراتی در آن object بدهيد . همچنين CLR بر Garbage Collection ها نيز نظارت می کند و از این طریق سازماندهی حافظه و جلوگیری از هدر رفتن فضا را به عهده دارد.

 

** طراح و معمار .net شخص بیل گیتس بوده است.

 

پ.ن: به سوالاتتون جواب می دم...  لطفا بپرسین ببینین خوب یاد گرفتم؟؟!!

 

+ نوشته شده در  دوشنبه دوم دی 1387ساعت 1:12  توسط تبسم  | 

سلام

 

سلام. من تبسم هستم.

اینجا یه کلاس مجازیه ی برای من که با راهنمایی های استادم،  جستجو کنم ، بپرسم، یاد بگیرم و چیزایی رو که یاد می گیریم با شما درمیون بذارم. من استاد خودمم.

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

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

موفق باشید.

 

+ نوشته شده در  دوشنبه دوم دی 1387ساعت 1:3  توسط تبسم  |