Home » آموزش » سی شارپ » ارتباط با دیتابیس با استفاده از Linq در سی شارپ
آبتین وب

ارتباط با دیتابیس با استفاده از Linq در سی شارپ

سلام
تو این پست می خوایم برنامه ای بسازیم که با استفاده از روش Linq To Sql چهار عملیات اصلی یعنی Insert / Delete / Update / Read رو بر روی دیتابیس انجام بدیم.

طراحی دیتابیس و جدول

ابتدا یک دیتابیس با نام DB1 در sqlserver ایجاد کنید . طبق تصویر زیر یک جدول با نام TB1 بسازید:

1

دقت کنید که فیلد ID از نوع Int و همینطور فیلد کلیدی یا همون Primary Key هست ، علاوه بر این ، خصوصیت Identity این فیلد برابر با yes قرار بدید تا مقداردهی خودکار بشه.

طراحی فرم ویندوزی
خوب جدول رو ذخیره کنید ، برگردید سمت VS و یک پروژه #C ایجاد کنید و یک فرم بر اساس تصویر زیر طراحی کنید:

2

همونطور که در عکس بالا دیدید ، در پنل سمت چپ عملیات نوشتن (Insert) انجام میشه و در پنل سمت راست عملیات خواندن / حذف و ویرایش.

ارتباط با دیتابیس
حالا باید یک کانکشن برای ارتباط با دیتابیس ایجاد کنید. برای اینکار در Server Explorer روی اولین گزینه ( Data Connection ) راست کلیک کنید و گزینه Add New Connection رو بزنید تا پنجره ایجاد کانکشن براتون باز بشه :

3

در پنجره ای که باز شده ، در قسمت server Name باید نام سور رو بنویسید که می تونید به جای اسم سرور ، فقط یک علامت نقطه بزارید تا تمام سرورها نصب بروی سیستمتون انتخاب بشن ، و بعد سایر قسمت ها را مطابق تصویر زیر تنظیم کنید و در اخر یک بار دکمه Test Connection رو کلیک کنید تا از صحت اطلاعات و برقراری ارتباط با دیتابیس مطمئن شوید (Test Connection Succeded)

4

اما در صورتی که با زدن دکمه تست با پیام خطا مواجه شدید ، یکی از گزینه های که تنظیم کرده اید نادرست هست.
خب بعد از اینکه ok کردید یک کانکشن جدید در قسمت server Explorer اضافه میشود :

5

ایجاد یک فایل linq برای ارتباط با دیتابیس
حالا باید یک فایل Linq برای ارتباط با دیتابیس و جداول به پروژه اضافه کنید.
روی نام پروژه در قسمت Solution Explorer راست کلیک کنید و بعد از زیر منوی Add گزینه New Item رو انتخاب کنید.از پنجره ای که باز شد ، در سمت راست گزینه #C رو انتخاب و در قسمت وسط بگردید گزینه Linq to Sql Class رو پیدا و انتخاب و نام lnq1 رو برای اون بنویسید و ok کنید تا این فایل به پروژتون اضافه بشه. ( تصویر زیر)

6

بعد از اینکه فایل linq رو اضافه کردید ، محیط design یا طراحی این فایل براتون باز میشه.

7

اون کانکشن که در قسمت server Explorer ایجاد کدید ، فلش کنارش رو کلیک کنید ، وارد شاخه Table بشید و بعد جدولی که قبلا با استفاده از Sql server managment studio ایجاد کرده اید رو با موس بگیرید بکشید در قسمت راست فایل لینک Drag کنید.( تصویر زیر )

8

میبینید که با اینکار جدولتون همراه با فیلدهایی که قبلا ایجاد کرده بودید در فایل linq قرار میگیره.
پروژه رو ذخیره کنید ، تا اینجای کار ارتباط با جدول برقرار شده ، بقیه کار فقط کد نویسی هست برای عملیاتی که می خوایم روی جدول انجام بدیم.

تا الان باید فایل LlINQ رو اضافه کرده باشید و جدول دیتابیستون رو داخلش Drag کرده باشید.
فرمی که قبلا طراحی کرده بودید ( در پست قبل ) رو باز کنید.
در محیط فضای نام پروژه ( تا بتوان از آن در تمام رویدادهای کلیک استفاده کرد)، یک آبجکت از نوع فایل linq1 که ساخته اید با نام linq بسازید( در اینجا نام فایل لینک ما linq11 هست )

9

کد:
lnq1DataContext linq = new lnq1DataContext();

Insert (نوشتن) یا همان اضافه کردن یک رکورد جدید در دیتابیس
روی دکمه Insert دو بار کلیک کنید تا رویداد کلیک این دکمه باز بشه ، بعد کد زیر رو داخل اون رویداد بنویسید:

کد:
TB1 insert_tb1 = new TB1();
insert_tb1.name = textBox1.Text;
insert_tb1.family = textBox2.Text;
insert_tb1.tell = textBox3.Text;
linq.TB1s.InsertOnSubmit(insert_tb1);
linq.SubmitChanges();
var query = from m in linq.TB1s select m.id;
comboBox1.DataSource = query;
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
MessageBox.Show("Insert Operate successfully.", "Inserted");
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲

توضیح کد :
خط اول: یک آبجکت با نام insert_tb1 از نوع جدولی با نام tb1 که در دیتابیس و در فایل لینک ما موجود هست ، ایجاد میشه.
خط دوم تا چهارم : مقادیر فیلدهای جدولمان را از طریق تکست باکس های روی فرم ، مقدار دهی می کنیم.
خط پنجم : آبجکت insert_tb1 رو به آبجکت linq1 که قبلا ایجاد کردیم ( ابجکت از نوع فایل لینک) ربط می دهیم.
خط ششم: تغییرات را اجرا و نهایی می کند و داده های در دیتابیس ذخیره می شوند.
خط هفتم و هشتم: در قسمت سمت راست فرم که مربوط به خواندن و حذف و ویرایش هست ، یک ComboBox داریم که فیل تمام رکوردهایی که در دیتابیس وجود دارد را نمایش می دهد ، پس از اینکه یک رکورد جدید اضافه کردید ، لازم هست که فیلد id رکورد جدیدی که به دیتابیس اضافه کردید ، به محتویات این ComboBox هم اضافه شود .خط هفتم و هشتم اینکار رو انجام میدهند.همچنین عین این دو خط باید در رویداد فرم لود هم نوشته شود تا زمانی که برنامه را اجرا می کنید مقادیر id ها از دیتابیس خوانده و در این combobox قرار بگیرند.
خط آخر : یک پیام مبنی بر موفقیت آمیز بودن عملیات Insert به کاربر می دهد.
( برنامه را اجرا و تست کنید)

Read(Search)/ Delete / Update
دکمه Search:

کد:
var query = from read in linq.TB1s where read.id == Convert.ToInt32(comboBox1.SelectedValue) select read;
            foreach (var myrecord in query{
                textBox4.Text = myrecord.name;
                textBox5.Text = myrecord.family;
                textBox6.Text = myrecord.tell;}

توضیح کد :
خط اول: یک متغیر با نام query از نوع variable(تغییرپذیر) = انتخاب رکوردی از دیتابیس که id آن برابر با id ای که در comboboxx انتخاب شده از جدولTB1s به وسیله آبجکت linq و قرار دادن آن رکورد(ها) با نام مجموعه Read
خط دوم: حلقه foreach به این منظور استفاده می شود که بتوان به تک تک رکوردهایی که در متغیر queryy ذخیره شده ، دسترسی داشت.myrecordd نام یک متغیر است که در هر چرخش حلقه ، به ترتیب یکی از رکوردها درونش قرار میگیره، تا بتوان به وسیله اون ، به فیلدهای رکورد انتخاب شده دسترسی داشت. ( به عنوان مثال در دور اول حلقه ، اولین رکورد انتخاب شده در درون myrecord قرار میگیره ، در دور دوم رکورد دوم تا…آخرین رکوردی که در Query انتخاب شده.)

دکمه Delete:

کد:
var query = (from delete in linq.TB1s where delete.id == Convert.ToInt32(comboBox1.SelectedValue) select delete).Single();
            linq.TB1s.DeleteOnSubmit(query);
            linq.SubmitChanges();
            MessageBox.Show("Delete  Operate successfully.", "Deleted");
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";
            var query2 = from d in linq.TB1s select d.id;
            comboBox1.DataSource = query2;
۱
۲
۳
۴
۵
۶
۷
۸
۹

توضیح کد :
خط اول:در قسمت Search توضیح داده شد. فقط .Single() به اخر خط اضافه میشه تا به Linq تضمین بدیم که تنهای یک رکورد برای حذف شدن ، انتخاب شده.
خط دوم : رکورد انتخاب شده ، از جدول TB1s با استفاده از آبجکت linq حذف میشود.
خط سوم : دستور حذف بر روی دیتابیس انجام و نهایی می شود.
دو خط آخر : مقادیر مربوط به ComboBox رو Refresh میکند ، تا id رکورد حذف شده ، از لیست ComboBox هم حذف شود.

دکمه Update:

کد:
var query = (from delete in linq.TB1s where delete.id == Convert.ToInt32(comboBox1.SelectedValue) select delete).Single();
            query.name = textBox4.Text;
            query.family = textBox5.Text;
            query.tell = textBox6.Text;
            linq.SubmitChanges();
            MessageBox.Show(

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

About علی ملاح

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *