فرهاد خانلری
کارشناس ارشد شبکه مایکروسافت

آموزش ارتباط با SQL Server در سی شارپ (C#)

برقراری ارتباط با بانک های اطلاعاتی SQL Server در زبان سی شارپ (C#) یکی از کارهایی است که هر برنامه نویسی باید با آن آشنایی داشته باشد. دنیای برنامه نویسی دنیایی زیبایی است و کسی در این رشته موفق تر است که از ابزار موجود بهینه استفاده کند و در کمترین زمان به بهترین محصول برسد.در برنامه های امروزی بدون بانک اطلاعاتی برنامه نویسی تقریباً غیر ممکن و بلا استفاده است زیرا تمام برنامه های امروزی دارای اطلاعات هستند و این اطلاعات برای همگان مهم و ضروری هستند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

در توسینسو میخوام سری آموزش های SQL Server که یکی از بهترین پایگاه های داده اطلاعاتی دنیا می باشد را قرار دهم در این سری آموزش ها بیشتر با بانک اطلاعاتی Sql و زبان محبوب سی شارپ (ُ#C) کار خواهم کرد.ابتدا به معرفی سی شارپ و SQL میپردازیم سپس ایجاد یک بانک اطلاعاتی ، نحوه متصل نمودن بانک به سی شارپ و استفاده از آن می پردازیم. پس با TOSINSO همراه ما باشید

آموزش ارتباط با SQL Server در سی شارپ (C#)

سی شارپ چیست؟

#C: زبانی شیءگرا و سطح بالا از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.زبان سی شارپ، یک زبان برنامه‌نویسی چند الگویی و است و منظم شده مدل‌های تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت می‌باشد. این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز در بر گرفت. سی شارپ یکی از ۴۴ زبان برنامه‌نویسی است که توسط زمان اجرای زبان مشترک از چارچوب دات‌نت پشتیبانی می‌شوند و در همه جا به وسیله مایکروسافت ویژوال استودیو شناخته می‌شود.

زبان سی شارپ با قدرت و در عین حال سطح بالایی خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامه‌نویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد. آخرین نسخه آن نسخه ۵٫۰ است که همزمان با دات‌نت ۴٫۵ در آگوست ۲۰۱۲ منتشر شد.

منبع:wikipedia

وب سایت توسینسو

مایکروسافت با بهره گیری از بهترین IDE خود یعنی Visual Studio توانست بهترین ، جذاب ترین ، پرکاربرد ترین محصول در نوع خود را تولید کند با ویزوال استادیو میتوان برنامه های #J# ، F# ، C، ویژوال بیسیک ، ++C ، و WCF وWPF و Silvr Light و ShsrePoint و ... نوشت حتی با ویژوال استادیو میتوان Modeling Projects کار کرد که همان نوشتن زبان UML که اختصار (Unified Modeling Language)هست و از برنامه های rational rose که جهت کار با زبان مدل‌سازی یکپارچه می باشد استفاده کرد و خود ویزوال استادیو بسیار قوی در این زمینه ها میتواند کمک کند.برنامه نویسان قدیمی نیز نگران نباشند با این IDE میتوانند همانگونه که در قدیم کد میزدند همچنان ادامه دهند .

آموزش ارتباط با SQL Server در سی شارپ (C#)

زبان SQL چیست؟

منشا اصلی سی‌کوال به مقالهٔ سال ۱۹۷۰ ادگار کاد تحت عنوان «مدل رابطه‌ای داده‌ها برای بانک‌های بزرگ داده‌های اشتراکی باز می‌گردد و به آن زبان SEQUEL میگفتند.SQL مخفف عبارت Structured Query Language میباشد و به زبان جستجويي ساخت يافته معروف است و همچنین دارای استاندارد بین المللی می باشد ، وظیفه اصلی آن امکان اتصال و دسترسی به اطلاعات موجود در يک پايگاه داده را می دهد .زبان SQL Server میتواند برای يک پايگاه داده عمل جستجو و گزينش اطلاعات را انجام دهد و با توجه به سیاست کاری برنامه نویس میتواند بر روی اطلاعات ذخيره شده در پايگاه داده عملیات های Delete ، Save , Insert update و ... را انجام دهددر جدول زیر تاریخچه Release شدن SQL Server را مشاهده مینمایید.

وب سایت توسینسو

معرفی تعریف های اولیه در SQL سرور

  • Table : همان جداول در sql هستند که مهمترين عناصر پايگاه داده هستند ، جداول برای ذخيره و نگهداری سازمان يافته اطلاعات مورد استفاده قرار می گيرند . Table ها یا همان جداول دارای سطر و ستون هستند و توسط يک نام منحصر (Uniq) به فرد در سطح برنامه شناسايي می شوند .
  • Record : به سطرهاي يک جدول رکورد ( Record ) میگویند.
  • Field: به هر يک از خانه های ستون يک جدول فيلد ( Field ) می گويند.
  • موجوديت یا Entity SQL : شی يا فردی در محيط پايگاه داده است که می خواهيم اطلاعات مربوط به آن را نگهداری کنيم .

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

مثال : به طور مثال در محيط پايگاه داده دانشگاه ، انواع موجوديت ها عبارتند از : دانشجو ، درس ، استاد ، دانشگاه و ... هر فيلد در بر گيرنده يک صفت و ويژگی برای موجوديت می باشد ، که دارای 2 جزء اصلی است :

  • اسم صفت ( Attribute Name): نام صفت مورد نظر را تعيين می کند . برای مثال فيلد نام ، نام خانوادگی ، شماره دانشجويي و ... در جدول اطلاعات مربوط به دانشجو .
  • مقدار صفت(Attribute Value) :در برگيرنده مقدار برای صفت مورد نظر است . برای مثال مقدار " فرهاد" به عنوان مقدار برای فيلد نام و "خانلری" به عنوان مقدار برای فیلد نام خانوادگی
  • تعریف پرس و جو (Query ): برای ايجاد يک پرسش و جستجو در جدول و استخراج اطلاعات مورد نظر استفاده می شود . نتايج حاصل از يک Query در يک جدول موقت که دارای فيلد ها و سطر های واجد شرايط جستجو است ، نمايش داده می شود .

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

در بخش اول این سری از آموزش های SQL و #C، شما فرا خواهید گرفت چطور یک پایگاه داده با SQL Server در C# .NET ایجاد کنید. وقتی یک پایگاه داده ایجاد کردیم، می آموزیم که چطور رکوردهای آن را خوانده و در یک فرم نمایش دهید سپس یاد می گیریم چطور بین رکوردهای پایگاه داده جستجو کنیم و یا اینکه چطور رکوردهای جدید اضافه یا حذف و یا ویرایش کنیم.برای اینکه از نصب SQL Server Express در کامپیوتر خود اطمینان پیدا کنید به منوی start بروید و گزینه هایی که در تصویر زیر مشخص شده را پیدا کنید. اگر آنها را پیدا نکردید باید SQL Server Express را دانلود کنید.

وب سایت توسینسو

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

www.microsoft.com/sql/editions/express/default.mspx

بعد از نصب SQL Server مطمئن شوید که در حالت اجرا است. در تصویر بالا روی پوشه Configuration Tools کلیک کنید تا گزینه هایی طبق تصویر زیر ظاهر شوند

وب سایت توسینسو

روی SQL Server Configuration Manager کلیک کنید تا پنجره ای مانند زیر باز شود:

وب سایت توسینسو

در سمت راست باید همانند تصویر فوق را باید دید. در غیر اینصورت روی هر کدام از آیتم ها راست کلیک کرده و Start را بزنید. حالا می توانید Configuration Manager را ببینید.در قسمت بعدی مقاله یاد خواهید گرفت که چطور یک پایگاه داده در سی شارپ و با استفاده از SQL Server Express ایجاد کنیم و چطور آن را مقدار دهی کنیم.برای ایجاد یک پایگاه داده، سی شارپ را اجرا کنید. یک پروژه جدید Windows Application در #C ایجاد کنید و نامی دلخواه برایش انتخاب کنید.در منوی بالای (Visual Studio) سی شارپ روی منوی Project کلیک کنید و Add New Item را انتخاب کنید

وب سایت توسینسو
وب سایت توسینسو

البته پنجره بالا را نیز میتوانید در قسمت Solution Explorer (سمت راست برنامه سی شارپ) روی اسم پروژه راست کلیک کنید واز قسمت Add انتخاب کنید Add New Item تا پنجره ی بالا باز شود ، در نسخه های 2010 به بعد visual studio پنجره فوق شبیه به زیر خواهد بود

وب سایت توسینسو

گزینه Service-based database را انتخاب کنید (در نسخه های قدیمی تر SQL Database را انتخاب کنید). سپس یک نام به پایگاه داده بدهید. در این مثال ما نام MyWorkers.mdf را انتخاب میکنیم . می خواهیم یک پایگاه داده از افرادی که برای ما کار می کنند ایجاد کنیم و به آنها شرح های شغلی بدهیم. در قدم بعدی روی دکمه Add کلیک کنید. در Visual Studio ۲۰۱۰ از شما درخواست می شود که یک مدل پایگاه داده انتخاب کنید. Default روی Dataset است که ما بدون تغییر Next را کلیک میکنیم ، در نسخه های قدیمی تر پنجره زیر را خواهید دید:

وب سایت توسینسو

در قدم بعدی Tables انتخاب کرده و سپس روی Finish کلیک کنید. در Visual Studio ۲۰۱۰ تصویر زیر را مشاهده می نمایید:

وب سایت توسینسو

بعد از انتخاب Finish به محیط طراحی سی شارپ برمیگردیم. در محیط سی شارپ، نگاهی به Solution Explorer در سمت بالا راست بیاندازید و خواهید دید که پایگاه داده شما به پروژه اضافه شده است:

وب سایت توسینسو

پایگاه داده ما در حال حاضر خالی است. ما باید به آن جدول هایی اضافه کنیم. بنابراین روی MyWorkers.mdf راست کلیک کنید و روی Open کلیک کنید. با این کار Database Explorer را مشاهده خواهید کرد

وب سایت توسینسو

روی Tables راست کلیک کنید تا منوی زیر را ببینید

وب سایت توسینسو

در منوی ظاهر شده روی Add New Table کلیک کنید تا یک جدول جدید ایجاد شود

وب سایت توسینسو

برای هر ستونی که در جدول نیاز دارید ، باید یک نام در قسمت Column Name بنویسید ، در قسمت Data Type مشخص میشود که چه نوع داده ای در آن قرار خواهد گرفت این داده ها از قبیل متن (text)، اعداد(int)، مقادیر Yes/No ، عکس (Image)، تاریخ و ساعت (DateTime) ، تاریخ (ِDate)و غیره....

  • نکته : اگر تیک قسمت Allow Nulls زده شود به این معنی است که این ستون از جدول می تواند مقداری نداشته باشد.(این کار برای درج کلید ها اجباری است)

به عنوان مثال : نام خانوادگی” همه کارمندان در برنامه باید نوشته شود پس تیک این گزینه را برای ستون “نام خانوادگی” خالی می گذاریم تا حتماً پر شود. اما نیازی به خصوصیت “گروه خونی” افراد نداریم پس می توان ستونی با عنوان “گروه خونی” ایجاد کرد و تیک گزینه Allow Nulls را زد تا افراد بتوانند به صورت دلخواه آن را وارد کنند و یا آن را خالی بگذارند.ما یک جدول ساده با ۴ ستون زیر را ایجاد می کنیم

Worker_ID

first_Name

last_Name

job_Title

ستون اول که Worker_ID است، عدد خواهد بود. ما می توانیم با تنظیمات بیشتر به پایگاه داده بگوییم که خودش این ستون را پر کند .مثلاً هر وقت یک کارگر جدید به پایگاه داده اضافه شد، SQL Server به صورت خودکار به آن یک عدد جدید اختصاص می دهد. بنابرین Worker_ID را در قسمت نام پایگاه داده وارد کنید:

وب سایت توسینسو

حالا باید به SQL Server بگوییم که چه نوع داده ای در ستون Worker_ID قرار خواهد گرفت. در قسمت Data Type کلیک کنید تا یک لیست کشویی ظاهر شود

وب سایت توسینسو

مطابق شکل انواع داده ای زیادی ظاهر می شوند، ما از این لیست int را انتخاب می کنیم. تیک گزینه Allow Null را هم خالی می گذاریم

وب سایت توسینسو

در خصوص انواع داده هایی که در لیست فوق دیدید میتوانیم به تصویر زیر اشاره کنیم و شما میتوانید در معرفی انواع Data type در SQL سرور به زبان ساده بیشتر در مورد این تایپ ها بدانید

وب سایت توسینسو

یک خصوصیت دیگر هم باید با این ستون انجام دهیم با نگاهی به پایین صفحه متوجه لیستی از خاصیت های خواهید بود . خاصیتی که با آن کار داریم Identity Specification است. Is Identity را Yes قرار دهید تا Identity Increment و Identity Seed ظاهر شوند

وب سایت توسینسو

با قراردادن این مقادیر sql server با اضافه شدن هر کارمند جدید به جدول مقدار ۱ را به Worker_ID اضافه می کند.

وب سایت توسینسو

برای نوع داده ستون دوم nvarchar(50)را انتخاب کنید. Nvarchar کوتاه شده variable-length character string است و n هم به معنی Unicode است. ر این نوع داده در فرمت UTF-16 ذخیره خواهد شد. این نوع فرمت ذخیره داده برای ذخیره کارکترهای غیرانگلیسی به کار می رود. برای کارکترهای انگلیسی هم از نوع varchar استفاده می شود. این مورد برای همه گزینه های موجود در لیست که n دارند به کار میروند. اگر “نام” برای شما زیاد مهم نیست و می خواهید اجازه دهید که کارگرها بتوانند نام خود را وارد نکنند، می توانید تیک Allow Nulls را بزنید:

وب سایت توسینسو

مقادیر زیر را برای ستون های دیگر جدول خود وارد کنید:

Column Name: last_Name

Data Type: nvarchar(50)

Allow Nulls: Yes

Column Name: job_Title

Data Type: nvarchar(50)

Allow Nulls: Yes

و جدول شما شبیه تصویر زیر خواهد بود

وب سایت توسینسو

در اینجا شما می توانید یک Primary Key برای جدول خود قرار دهید Primary Key یک ردیف خاص در جدول شما ایجاد می کند. این باید منحصر به فرد باشد و هیچ تکراری مجاز نیست. شما نمی توانید “firstName” را به عنوان Primary Key قرار دهید به این دلیل که بسیاری از مردم دارای نام یکسان هستند. در جدول ما تنها ستونی که این خاصیت را دارد WorkerID است. اگر یک جدول دیگر هم بعدا ایجاد کنیم می توانیم از Primary Keyها و Foreign Key ها برای پیوند دادن این دو جدول به یکدیگر استفاده کنیم SQL Server یک پایگاه داده ارتباطی است و Primary Key برای اهداف پیوند دادن بسیار مورد استفاده قرار می گیرند.

برای ایجاد یک Primary Key روی ستون Worker_ID راست کلیک کنید و از منوی ظاهر شده Primary Key را انتخاب کنید.(البته ما نیازی به Primary Key نداریم پس در اینجا Primary Key را ایجاد نمی کنیم). از منو به File > Save All بروید تا پروژه خود را ذخیره کنید. بعد از این کار از شما برای وارد کردن یک نام برای جدول جدید ایجاد شده سوال خواهد شد. ما این جدول را tblWorkers نام می گذاریم:

وب سایت توسینسو

OK کنید تا به صفحه اصلی بازگردید. روی علامت + کنار Tables کلیک کنید تا گسترش یابد و ستون های ایجاد شده را ببینید:

وب سایت توسینسو

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

وب سایت توسینسو

Show Table Data را انتخاب کنید تا یک تب جدید ظاهر شود:

وب سایت توسینسو

در اینجا نام همه ستون هایی که قبلا ایجاد کرده ایم وجود دارند. برای وارد کردن داده درون آنها، به سادگی درون یک خانه در زیر آن ستون کلیک کرده و داده مورد نظر را بنویسید.در ستون firstName کلیک کنید (WorkerID به طور خودکار مقداردهی می شود) و یک نام درون آن قرار دهید. این کار را برای lastName نیز انجام دهید. شغل را نیز در jobTitle وارد کنید:

وب سایت توسینسو

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

وب سایت توسینسو

تا اینجا ما یک ردیف در پایگاه داده خود ایجاد کرده ایم. چند ردیف دیگر هم مانند تصویر میتوانید اضافه کنید .

وب سایت توسینسو

پروژه را ذخیره کنید ، تا اینجا شما یک پایگاه داده (البته خیلی ساده) ایجاد کرده اید

در این بخش یاد میگیریم که چطور به یک پایگاه داده SQL Server متصل شویم.همانطور که می دانید برنامه نویسی بدون پایگاه داده بی فایده است . در گام اول یک پروژه جدید ایجاد کنید و برای یافتن پایگاه داده MDF که در بخش قبل ایجاد کردید، به قسمت پوشه پروژه ها بروید سپس روی نام پروژه مورد نظر کلیک کنید تا MyWorkers.mdf را نمایان شود.این فایل را در جایی از کامپیوتر خود کپی کنید. برای مثال در ویندوز XP آن را در درایو C کپی کنید. آدرس آن به صورت زیر باشد

C:\MyWorkers.mdf

در ویندوز های XP به بعد نیز آن را در جایی کپی کنید مثلا آدرس زیر:

“C:\Users\Owner\\Documents\MyWorkers.mdf”

دقت کنید owner نام یک یوزر ویندوز است که دارای پروفایل است.برای اتصال به یک پایگاه داده SQL Server Express ابتدا باید یک شیء اتصال SQL یا SQL Connection object بسازید. سپس شما به یک connection string نیاز دارید تا به سی شارپ بگویید که پایگاه داده شما در چه آدرسی از کامپیوتر ذخیره شده است.برای ایجاد شیء اتصال، در یک جای خالی از فرم دوبار کلیک کنید و سپس در خارج از رویداد Load مربوط به فرم کد زیر را بنویسید:

System.Data.SqlClient.SqlConnection con;

حالا درون رویداد Load فرم دستور زیر را وارد کنید:

con = new System.Data.SqlClient.SqlConnection();

با این دستورات وقتی فرم بارگذاری می شود، شیء اتصال به SQL نیز با نام con ساخته می شود.

وب سایت توسینسو

کدهایی که تا به حال ایجاد کردیم باید مانند تصویر فوق باشند . حالا که ما یک شیء اتصال داریم، می توانیم به خاصیت ConnectionString دسترسی داشته باشیم. برای دیدن اینکه string باید چه باشد، روی منوی Data کلیک کنید. سپس Show Data Sources را انتخاب کنید. این کار باعث نمایش پنجره Data Sources می شود.

وب سایت توسینسو

روی Add New Data Source کلیک کنید تا پنجره ای باز شود. در این پنجره مطمئن شوید که پایگاه داده مورد نظر انتخاب شده است، سپس روی دکمه Next کلیک کنید تا به مرحله انتخاب اتصال داده (Choose your Data Connection) بروید. انتخاب دکمه New Connection باعث میشود پنجره زیر را باز شود.

وب سایت توسینسو

روی دکمه Change کلیک کنید تا پنجره زیر باز گردد.

وب سایت توسینسو

Microsoft SQL Server Database File را انتخاب کرده و OK کنید. سپس روی دکمه Browse کلیک کنید تا پایگاه داده ذخیره شده را پیدا کنید و در نهایت پنجره Add Connection باید مطابق عکس زیر باشد.

وب سایت توسینسو

روی دکمه Test Connection کلیک کنید تا از درست بودن همه چیز مطمئن شوید. این کار واجب نیست اما برای احتیاط از درست متصل بودن به بانک انجام شود، در نهایت OK کنید تا به پنجره Choose your Data Connection برگردید. در پنجره با کلیک کردن روی علامت + در کنار Connection String کد هایی را خواهید دید

وب سایت توسینسو

این آدرس در ویندوز XP نیز به صورت زیر خواهد بود

وب سایت توسینسو

برای ویندوز های جدید تر مانند 7، ویستا نیز مانند تصویر زیر است

وب سایت توسینسو

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

con.ConnectionString = “

حالا آدرسی که قبلا کپی کرده اید را در اینجا Paste کنید

con.ConnectionString =“DataSource=.\SQLEXPRESS; AttachDbFilename =C:\MyWorkers.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True“;

بعد از آدرس نیز باید یک دابل کوتیشن(") و یک نقطه ویرگول(سمیکالن ;) قرار دهید. پنجره کدهای ما تا به اینجا همانند تصویر زیر است

در ویندوز XP:

وب سایت توسینسو

در ویندوز های 7 و ویستا:

وب سایت توسینسو

که عمده تفاوت این دو در آدرس ها می باشد.همانطور که می بینید ما در کد بالا Errorهایی را مشاهده می کنیم. همه این خطا به دلیل کارکتر بک اسلش (\) می باشند زیرا در سی شارپ این کارکتر، یک کارکتر خاص است. برای حل این مشکل باید یک کارکتر بک اسلش دیگر (\) قبل از آن تایپ کنیم ، یعنی دابل بک اسلش (\\) البته میتوان به جای این کار از علامت @ قبل از "" استفاده کرد در این صورت دیگر نیازی به دابل بک اسلش نیست.

وب سایت توسینسو

دستور بالا محل پایگاه داده را به سی شارپ می گوید. اگر پایگاه داده شما به یک نام کاربری نیاز داشته باشد می توانید دستور زیر را به کد بالا اضافه کنید (مثال پایگاه داده ما به نام کاربری نیاز ندارد)

User ID=your_user_name;

به جای yourusername نام کاربری را بنویسید. بعد از connection string باید یک اتصال به پایگاه داده را باز کنید. برای این کار از شیء con استفاده می کنیم

con.Open();

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

con.Close();

ما از دو MessageBox استفاده میکنیم و آت را به کد خود اضافه می کنیم تا از باز شدن و بسته شدن اتصال به پایگاه داده مطلع شویم

وب سایت توسینسو

برنامه را اجرا کرده و آن را تست کنید. شما باید ابتدا یک پنجره را ببینید که پیغام ” Database Open” را دارد و بعد از بستن آن یک پنجره دیگر ظاهر شده و پیغام “Database closed” را نمایش می دهد.تبریک میگم شما به یک پایگاه داده متصل شدید. در این بخش یاد میگیریم که در سی شارپ چطور به رکورد های جدول workers دست پیدا کنیمهمانطور که می دانید برنامه نویسی بدون پایگاه داده بی فایده است . پس جهت دیدن این سری از مطالب در TOSINSO بـــمانید.برای اینکه بین رکورد های ذخیره شده در جدول حرکت کنیم به یک Dataset و یکDataAdapter نیاز داریم.

  • Dataset: جایی است که تمام داده هایی که از جدول پایگاه داده گرفته ایم در آن ذخیره می شوند و ضمن اینکه Dataset باید با داده پر شود.
  • DataAdapter: شیء اتصال (Connection Object) و DataSet نمیتوانند یکدیگر را پیدا کنند بنابراین به یک واسط نیاز دارند تا آنها را به هم بشناساند و این کار بر عهده DataAdapter است. در واقع نقش DataAdapter این است که Dataset را با رکوردهای پایگاه داده پر کند.

برای ایجاد یک Dataset کد زیر را خارج از رویداد Load مربوط به فرم سی شارپ مینویسیم. در واقع ما اینجا یک Dataset با نام ds1 ایجاد می کنیم

DataSet ds1;

سپس دستور زیر را درون رویداد Load مربوط به فرم سی شارپ می نویسیم

ds1 = new DataSet();

برای دسترسی کاربران نیز میتوان از تصویر زیر استفاده نمود(اختیاری)

وب سایت توسینسو

میتوان کد هایی که تا به حال نوشتیم (درس قبل) در تصویر زیر مشاهده نمود

وب سایت توسینسو

برای DataAdapter نیز دستور زیر را خارج از رویداد Load فرم سی شارپ طبق کد زیر و ضمناً در اینجا ما یک نمونه یا یک شیء DataAdapter با نام da ایجاد می کنیم

System.Data.SqlClient.SqlDataAdapter da;

درون رویداد Load فرم هم یک شیء از متغیر da ایجاد می کنیم:

string sql = “SELECT * From tblWorkers”;
da = new System.Data.SqlClient.SqlDataAdapter( sql, con ); 

دستور زیر

string sql = “SELECT * From tblWorkers”;  

یک متغیر رشته ای(String) با نام sql ایجاد می کند و عبارت SELECT From tblWorkers هرچیزی را از جدول tblWorkers انتخاب می کند. و در ادامه این مقادیر انتخاب شده در متغیر sql ذخیره می شوند.SELECT که در دستور فوق استفاده شده به معنای “انتخاب کردن” می باشد یعنی انتخاب کن از جدول X همه رکورد ها را یعنی بعد از SELECT علامت آمده که به معنای “همه رکوردها” است.

پس SELECT به معنای “انتخاب همه رکوردها” است. بعد از هم کلمه From به معنای “از” آمده و بعد از این کلمه هم نام جدولی که می خواهیم از آن رکوردهایی را انتخاب کنیم می آید. پس عبارت SELECT * From tblWorkers به معنای “انتخاب همه رکوردها از جدول tblWorkers” است. شیء DataAdapter از دستور SQL برای گرفتن رکوردها از پایگاه داده استفاده می کند. اما باید به DataAdapter بگوییم از کدام شیء اتصال استفاده کند. برای این منظور، در میان پرانتزها از sql, con استفاده می کنیم:

( sql, con );

عبارت اول داخل پرانتز، رکوردهایی که باید توسط DataAdapter گرفته شوند مشخص می شود که این رکوردها در مثال بالا در متغیر sql ذخیره شده اند. و عبارت دوم داخل پرانتز، جایی که باید رکوردها از آن جا گرفته شوند مشخص می شود که در مثال بالا con مشخص کننده این موضوع است

وب سایت توسینسو

برای پر کردن dataset از رکوردهای موجود در پایگاه داده، میتوان از DataAdapter و دستور مربوط به آن Fill استفاده می کنیم

da.Fill( ds1, “Workers” ); 

دستور فوق Dataset ما را که ds1 نام دارد، از رکوردها پر می کند. در میان پرانتز مربوط به دستور بالا، ابتدا نام Dataset را می نویسیم و سپس از کاما هم یک نام برای این پر کردن می نویسیم. نامی که ما به این عمل پر کردن می دهیم Workers است. دقت داشته باشید که این نام یک رشته است و باید بین ۲ دابل کوتیشن قرار گیرد.

دستور فوق حتماً باید را قبل از دستور ;()con.Close وارد شود. خوب حالا رکوردهای موجود در پایگاه داده ما در یک Dataset با نام ds1 ذخیره شدند و می توانیم آنها را درون فرم سی شارپ نمایش دهیم. نمایش داده های یک Dataset تا اینجا ما یک Dataset با نام ds1 داریم که با رکوردهایی از جدول پایگاه داده پر شده است

Display Data from a Dataset in C# .NET

  • نمایش داده هایی که در dataset ذخیره شده اند:

ما هنوز نمی توانیم این رکوردها را ببینیم. می بایست رکوردها را در یک فرم نمایش دهیم. می خواهیم داده ها را در TextBoxهایی قرار دهیم. برای این منظور ۳ TextBoxو ۳ label به فرم اضافه می کنیم

وب سایت توسینسو

میخواهیم وقتی فرم بارگذاری می شود اولین رکورد از Dataset در TextBox ها نمایش داده شود. برای این منظور با استفاده از یک متد که خودمان تعریف می کنیم کار را انجام خواهیم داد. برای تعریف این متد، بعد از رویداد Load فرم سی شارپ ، یک متد جدید با نام NavigateRecords اضافه کنید. این متد قرار نیست چیزی را برگرداند پس می توانید آن را از نوع void ایجاد کنید.همانطور که از اسم این متد پیدا هست ما میخوایم بر روی رکور های موجود در پایگاه داده ها حرکت کنیم.درون این متد یک متغیر از نوعDataRow و با نام dRow تعریف می کنیم

DataRow dRow = ds1.Tables["Workers"].Rows[0];

همانطور که میدانید در سی شارپ پس از وارد کردن یک دات یا نقطه پنجره ای باز خواهد شد به نام پنجره intelicence که کار را برای برنامه نویسان بسیار ساده کرده است . لذا پس از وارد کردن نام Dataset و زدن یک نقطه، پنجره intelicence باز میشود که شامل لیستی است در این لیست Tables را انتخاب میکنیم. Tables یک کلکسیون (مانند آرایه) است و لیستی از جداول در دسترس را ذخیره می کند.

برای این که به سی شارپ بگوییم کدام جدول را می خواهیم، نام آنها را در میان یک براکت و ۲ دابل کوتیشن می نویسیم (ما در اینجا Workers را نوشته ایم). بعد از آن دوباره یک نقطه می گذاریم و دوباره لیستی ظاهر می شود، در این لیست Rows را انتخاب کنید. در میان براکت ها نیز شماره سطری که می خواهیم را قرار می دهیم. شماره اولین سطر جدول صفر است. همانند تصویر زیر کد های ما این چنین است

وب سایت توسینسو

در واقع دستور فوق اولین سطر از جدولی را که درون ds1 ذخیره شده را گرفته و درون متغیری با نام dRow و از نوع DataRow قرار می دهد. علاوه بر سطر، ما نیاز به تعریف یک ستون هم داریم. برای تعریف یک ستون، از دستور زیر استفاده می کنیم

dRow.ItemArray.GetValue(1).ToString()

در اینجا ما ابتدا شیء Row را که آن را dRow نام گذاری کرده ایم، آورده ایم و بعد از گذاشتن یک نقطه، از لیستی که ظاهر می شود ItemArray را انتخاب می کنیم. این آرایه ای است از تمام آیتم هایی (ستون ها) که در Row ما وجود دارد.جهت یاد آوری در درس های گذشته پایگاهی که ایجاد کردیم دارای یک جدولی بود که دارای ۴ ستون بود

WorkerID، firstname، lastname و jobtitle. ItemArray

ما در SQL Server گفتیم که چه نوع داده ای در ستون Worker_ID قرار خواهد گرفت. در قسمت Data Type کلیک کردیم مانند تصویر زیر

وب سایت توسینسو

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

وب سایت توسینسو

یک خصوصیت دیگر هم که باید با این ستون بدهیم Identity Specification است. Is Identity را Yes قرار دهید تا Identity Increment و Identity Seed ظاهر شوند

وب سایت توسینسو

با قراردادن این مقادیر sql server با اضافه شدن هر کارمند جدید به جدول مقدار ۱ را به Worker_ID اضافه می کند.نکته:اگر بخواهیم SQL Server به صورت نرمال هربار یک عدد اضافه کند به این ستون ، تیک گزینه Allow Null را هم باید خالی بگذاریم .یعنی این ستون نمیتواند خالی رها ود و حتماً دارای مقدار باشد هرچند پر کردن مقدار این ستون را خود Sql به عهده گرفته است.

بنابراین WorkerID به علت اینکه تنظیمات اش را از صفر شروع می شود آیتم شماره صفر خواهد بود، firstname آیتم شماره ۱، lastname آیتم ۲ و jobtitle آیتم ۳ است. بعد از یک نقطه(دات) دیگر، لیستی دیگر ظاهر می شود. از این لیست GetValue را انتخاب می کنیم. GetValue مقادیر را از ستون های جدول می گیرد. بین پرانتزهای مربوط به GetValue ما نیاز به تعداد آیتم های از آرایه داریم.

GetValue به ستون first_name از Dataset مراجعه می کند.و در نهایت ما نیاز به تبدیل کردن آن به یکstring داریم که این کار را با متد ToString() انجام می دهیم. متد Tostring هم متدی است که خود مایکروسافت در BCL گنجانده شده است و متدی است آماده و ما فقط برای استفاده نیاز به صدا زدن این متد داریم ، سپس وقتی به یک رشته تبدیل شد میتوان آن را درون یک TextBox قرار داد. در آخر باید متد NavigateRecords همانند تصویر زیر می باشد

وب سایت توسینسو
textBox1.Text = ds1.Tables["Workers"].Rows[0].ItemArray.GetValue(1).ToString();

البته اگر میخواهید میتوانید از متد contains استفاده کنید البته این متد زمانی کاربرد دارد که می خواهیم بدانیم که آیا یک رشته شامل کارکترهای مشخصی می باشد یا خیر. کاربرد این متد بسیار آسان است. به مثال زیر توجه کنید:

وب سایت توسینسو

در مثال بالا که واضح است اگر کارکتر “–” در رشته ما موجود باشد یک پیغام True به صورت messagebox نمایش داده می شود .مثال بالا به صورت کاملاً اختیاری بود بر میگردیم به مثال خودمان در نهایت کاری که باید انجام دهیم این است که، یک فراخوانی به متد NavigateRecords ایجاد کنیم. برای این کار دستور ;()NavigateRecords را قبل از دستور ;()con.Close وارد کنید:

وب سایت توسینسو

با اجرای برنامه باید چیزی شبیه به تصویر زیر را مشاهده کنید

وب سایت توسینسو

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

وب سایت توسینسو

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

وب سایت توسینسو

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

وب سایت توسینسو

اگر از messagebox استفاده نکنیم و کد ها را در بلاک if نگذاریم با پیغام IndexOutOfRange که از سوی خود سی شارپ صادر می شود برخورد میکنیم.در قسمت بعدی جابجایی بین رکوردها را به صورت مفصل و دقیق تر بررسی خواهیم نمود.

در این بخش یاد میگیریم که چطور در بین رکورها حرکت کنیم. در درس گذشته برای اینکه بین رکورد های ذخیره شده در جدول حرکت کنیم به یک Dataset و یکDataAdapter نیاز بود که به خوبی با این ابزار آشنا شدیم

آموزش جابجایی بین رکوردهای SQL

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

دگمه های پیمایش پایگاه داده

آموزش حرکت رو به جلو بین رکورد های SQL

برای اینکه به کاربر اجازه دهیم بتواند به رکورد بعدی انتقال پیدا کند می بایست با برنامه نویسی و تغییر در مقدار Row در DatasSet این کار صورت پذیرد.برای این کار باید دو متغیر در پروژه از قبل ایجاد شده بنویسیم که این دو متغیر باید بیرون فرم load باشند این دو متغیر که در زیر آمده اند اولی که MaxRows می باشد تعداد سطرهایی که در Dataset وجود دارد را نگه می دارد و متغیر دومی که ایجاد میکنیم برای منظور تغییر شماره Row فعلی استفاده می شود زیرا میخواهیم بین رکورد ها حرکت کنیم.

int MaxRows = 0;

int inc = 0;
وب سایت توسینسو

همانطور که در تصویر بالا مشخص است دو متغیر در بیرون از Load نوشته شده اند و دارای مقدار اولیه 0 می باشند.شاید برخی بپرسند برای گرفتن تعداد سطرها (Row ها) در Dataset نیاز به متغیر می باشد؟ جواب خیر است زیرا شما می توانید از خاصیت Count مربوط به Rows استفاده کنید.کد زیر را در رویداد load فرم زیر ()NavigateRecords وارد کنید:

MaxRows = ds1.Tables["Workers"].Rows.Count;

همانطور که در کد بالا خواهید دید جهت استفاده از خاصیت Count میتوان به جای مشخص کردن شماره یک سطر مشخص، بعد از Rows یک نقطه یا همان Dot گذاشته و از خاصیت Count بهره بگیریم. خاصیت Count تعداد سطرهای موجود در یک Dataset مشخص را به ما میدهد.

وب سایت توسینسو

پس تا اینجا وقتی برنامه اجرا شود داخل متغیر MaxRows ما تعداد سطرهای موجود در Dataset ما خواهد بود .در درس های گذشته دیدیم که متد NavigateRecords چطور تکمیل شد در واقع دستوری که در تصویر زیر میبینیم اولین سطر از جدولی را که درون ds1 ذخیره شده را گرفته و درون متغیری با نام dRow و از نوع DataRow قرار می دهد که این متد را باید تغییر داد.

وب سایت توسینسو

این دستور به صورت ثابت همیشه به اولین سطر یعنی سطر صفر اشاره دارد حتی اگر تغییر کند بنابر این میتوان از متغیر inc استفاده نمود زیرا عملیاتی که می خواهیم انجام دهیم این است که وقتی روی دکمه Next Record کلیک شد، مقدار را افزایش دهیم و این مقدار در این متغیر بماند.کد NavigateRecord بالا را به صورت زیر تغییر میدهیم یعنی به جای اینکه 0 داخل براکت باشد متغیر inc را جایگزاری میکنیم.

DataRow dRow = ds1.Tables["Workers"].Rows[inc];

سپس به محیط طراحی میرویم یک دگمه جدید به فرم اضافه میکنیم و خاصیت Text آن را به Next Record تغییر میدهیم خاصیت نام آن را به btnNext تغییر میدهیم مطاق شکل زیر کار را ادامه خواهیم داد.

وب سایت توسینسو

همانطور که میدانید اگر ذوروی Button دابل کلیک کنیم وارد محیط کدنویسی و رویداد کلیک دگمه میشویم پس با دابل کلیک روی Button و کد نویسی داخل این رویداد میخواهیم بررسی کنیم که چه چیزی درون متغیر MaXRows وجود دارد؟ ضمن اینکه فراموش نشود باید متغیر inc را یک واحد افزایش دهیم زیرا این متغیر inc است که ما را به رکورد بعدی هدایت می کند.در ادامه شرط if زیر را به Button Next Record اضافه می نماییم.

وب سایت توسینسو

توضیحات کد:خط ااول دستور if می گوید که اگر inc برابر با تعداد سطرها (MaxRows – 1) نشده، متغیر inc را ۱ واحد افزایش بده و سپس متغیر NavigateRecords را فرامی خواند در غیر این صورت هم یک پیغام مبنی بر No more rows برای ما چاپ میشود یعنی اگر به پایان سطرهای MaxRows رسیدیم با پیغامی ما را آگاه کن.شاید خیلی از شما بدانید که سی شارپ Zero Base هست یعنی تمام عملکردهای شمارش آن از 0 آغاز میشود

پس دلیل اینکه ما از MaxRows -1 استفاده می کنیم این است که سطرهای جدول ما از شماره صفر شروع می شوند ولی در متغیر MaxRows تعداد سطرها از ۱ شروع شده است پس باید MaxRows را منهای عدد ۱ کنیم. مثلا اگر جدول ما دارای ۴ سطر باشد، این سطر ها از شماره صفر تا ۳ هستند که جمعا می شود ۴ تا دقت کنید اگر MaxRows را منهای ۱ نکنیم با خطای IndexOutOfRange مواجه خواهیم شد.برنامه را با کلید F5 یا Run آغاز میکنیم.

وب سایت توسینسو

آموزش حرکت رو به عقب در پایگاه داده SQL

همانند کار های بالا به راحتی میتوان برای عقب رفتن در پایگاه نیز کد نوشت ابتدا یک دگمه دیگر به فرم موجود اضافه میکنیم ،خاصیت Text آن را Previous Record قرار دهید و خاصیت نام آن را btnPrevious میگذاریم روی Button دابل کلیک کرده تا به قسمت کدنویسی آن برویم و دستورات زیر را تایپ میکنیم.

وب سایت توسینسو

توضیحات کد: ابتدا چک می شود که متغیر inc بزرگتر از صفر باشد. اگر این متغیر بزرگتر از صفر باشد آنگاه دستورات میان کروشه های if اجرا می شوند که ابتدا 1واحد از متغیر inc کم می شود و سپس متد NavigateRecords فراخوانی می شود. اگر مقدار متغیر inc برابر با صفر باشد و ما روی دکمه کلیک کنیم (یعنی وقتی برنامه اجرا می شود و هنوز روی دکمه ای که در بخش قبل ایجاد کردیم کلیک نکرده ایم، روی این دکمه کلیک کنیم) دستورات مربوط به else اجرا می شوند یعنی First Record.برنامه را با کلید F5 یا Run آغاز میکنیم و روی هر دو دگمه کلیک میکنیم تا رو به عقب و جلو برویم

وب سایت توسینسو

آموزش پرش به آخرین رکورد در پایگاه داده Jump To End Record

برای رفتن به آخرین رکورد از پایگاه داده، فقط کافی است متغیر inc و MaxRows مقدار یکسانی داشته باشند.یک دگمه جدید به فرم اضافه میکنیم و خاصیت Text آن را Last Record گذاشته و خاصیت نام آن را btnLast قرار میدهیم و کد های زیر را درون رویداد کلیک Button جدید مینویسیم.

وب سایت توسینسو

شکل کلی فرم ما تا این لحظه شبیه تصویر زیر خواهد بود

وب سایت توسینسو

آموزش پرش به اولین رکورد در پایگاه داده

برای رفتن به اولین رکورد از پایگاه داده کافی است مقدار صفر را درون متغیر inc قرار دهیم.همانند قبل دگمه ای اضافه کرده و درون رویداد آن طبق تصویر زیر کد ها را تایپ میکنیم.

وب سایت توسینسو

این کد چک می کند که آیا inc برابر با صفر است یا خیر؟ و اگر برابر با صفر نبود دستورات درون if اجرا شده و آن را برابر با صفر می کند. سپس متد NavigateRecord اجرا می شود.فرم کلی ما تا اینجا به اینجا به شکل زیر است.

وب سایت توسینسو
  • چه کارهایی با SQL در سی شارپ می توان انجام داد؟

    در واقع اگر سی شارپ نباشد SQL سرور بی معنی است و برعکس ، ایندو مکمل هم هستند ، SQL سرور بانک اطلاعاتی سی شارپ است و در کنار هم معنی پیدا می کنند ، شما می توانید براحتی از طریق دستورات سی شارپ در بانک SQL جدول ، رکورد ، فیلد و حتی موجودیت ها را تعریف کنید ، شما می توانید Query های خود را از طریق سی شارپ برای SQL سرور ارسال کنید و ...
  • آیا یادگیری دستورات SQL در سی شارپ الزامی است؟

    بله ، طبیعی است که شما به عنوان یک برنامه نویس سی شارپ باید با حداقل Query های ممکن در SQL سرور آشنا باشید و حداقل با نحوه کار کردن دستوراتی مثل SELECT ، JOIN ، ALTER ، UPDATE و ... آشنا باشید

فرهاد خانلری
فرهاد خانلری

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

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

نظرات