Insert Update Delete with LINQ to SQL


Microsoft Visual Studio 2008 Professional Edition
Microsoft SQL Server 2005 Express

สาธารณะDownload SourcesCode

Date: 08-04-08 วันนี้เป็นตัวเลขที่สวยนะครับ ไม่ได้บ้าหวยหรอกครับ เป็นเพียงเป็นวันเกิดของบทความนี้เท่านั้นครับ แต่ถ้าพูดถึงเรื่องหวย ผมก็ซื้อหวยรัฐบาลเกือบทุกงวดเหมือนกันครับ งวดละใบ แค่อยากถูกรางวัลที่ 1 ครับ ก็เลยซื้อไว้ อยากถูกรางวัลแต่ไม่ซื้อจะถูกใหมครับ ???… เช่นเดียวกันสำหรับ มือใหม่ ถ้าอยากเก่งโปรแกรมมิ่ง ต้องซ้อมมือครับ ต้องซ้อม และก็ซ้อม วันหนึ่งก็เก่งเอง… เข้าเรื่องกันดีกว่า มาซ้อมมือกันหน่อยครับ

 
LINQ (Language Integrated Query) เป็นอีกหนึ่งเทคโนโลยีสำหรับ .NET Framework ที่เหล่ากรรมกรซอฟท์แวร์(Developer) ต้องจับตามอง และต้องติดตาม เนื่องจาก LINQ ได้เข้ามาแก้ปัญหา Impedance Mismatch หรือความไม่เข้ากันระหว่างความเป็นจริงของฐานข้อมูล กับความเป็นจริงของการเขียนโปรแกรม เนื่องจากปัจจุบันระบบฐานข้อมูลส่วนใหญ่ยังคงเป็นแบบ Relation คือมีความสัมพันธ์ของข้อมูลเป็นแบบตาราง การทำงานกับข้อมูลทำได้โดยใช้คำสั่งภาษา SQL แต่ในการเขียนโปรแกรมแบบ OOP (Object Oriented Programming) เพื่อทำงานกับข้อมูลที่เป็นแบบ Relation นั้นประสบปัญหามาก…

Microsoft จึงได้พัฒนาเทคโนโลยี LINQ เพื่อแก้ปัญหาการทำงานระหว่าง Relational database กับการโปรแกรมแบบ OO (Object Oriented) เพื่อช่วยให้ Developer สามารถพัฒนาโปรแกรมได้เร็วขึ้น ง่ายขึ้น ตามแบบของ Microsoft คือง่าย เร็ว แต่ผลงานมืออาชีพ (อันนี้ความเห็นส่วนตัว) บทความนี้จึงนำเสนอ การใช้งาน LINQ ในการทำงานกับข้อมูล เช่น Insert, Update และ Delete แบบง่ายๆ ให้มือใหม่ได้ลองเล่นกันครับ สำหรับท่านที่ต้องการปูพื้นเรื่อง LINQ สามารถอ่านได้จากบทความของ คุณ banpote_tt ตามเอกสารอ้างอิง

หน้าจอโปรแกรม Insert Update Delete Customers Data เป็นดังรูป

clip_image002

การทำงานของระบบ Insert Update Delete Customers Data

1. การ Insert ข้อมูล

ป้อนข้อมูล Customers Data แล้วกดปุ่ม Insert จะ Show Message Box บันทึกข้อมูลเรียบร้อย เมื่อกดปุ่ม OK ข้อมูลจะโชว์บน DataGridView

clip_image004

Code Insert New Customer:

            using (DataClasses1DataContext db = new DataClasses1DataContext())
           
{
               
//db.Log = Console.Out;
                var cs = (from cus in db.Customers where cus.CustomerID == this.txtCustomerID.Text.Trim() select cus).Count ();
               
if (cs == 0)
               
{
                   
// new customer
                    Customer newCus = new Customer()
                   
{
                       
CustomerID = this.txtCustomerID.Text.Trim(),
                       
ContactName = this.txtContactName.Text.Trim(),
                       
CompanyName = this.txtCompanyName.Text.Trim(),
                       
Address = this.txtAddress.Text.Trim(),
                       
Country = this.txtCountry.Text.Trim(),
                       
City = this.txtCity.Text.Trim(),
                       
PostalCode = this.txtPostalCode.Text.Trim(),
                       
Phone = this.txtPhone.Text.Trim()
                   
};

                    //Insert new customer บน LINQ (memory)
                    db.Customers.InsertOnSubmit(newCus);
                   
//Insert ข้อมูลจริงบน Table
                    db.SubmitChanges();
                   
MessageBox.Show("บันทึกข้อมูล Customer เรียบร้อย", "ผลการทำงาน");
                  
                   
dataGridView1.DataSource = from cus in db.Customers where cus.CustomerID == this.txtCustomerID.Text.Trim() select cus;
                   
clearData();
               
}
               
else

                    MessageBox.Show("มีข้อมูล CustomerID = " + this.txtCustomerID.Text.Trim() +" อยู่แล้ว กรุณาป้อนใหม่", "ผลการตรวจสอบ");
           
}

2. การ Update ข้อมูล

ป้อนรหัสลูกค้า และรายละเอียดลูกค้าแล้วกดปุ่ม Update จะโชว์ MessageBox แก้ไขข้อมูลเรียบร้อย เมื่อกดปุ่ม OK ข้อมูลที่แก้ไขเรียบร้อยจะแสดงบน DataGridView

clip_image006

Code: Update Customer

           



           
using (DataClasses1DataContext db = new DataClasses1DataContext())
           
{
               
//db.Log = Console.Out;
                //ดึงข้อมูล Customer ที่ต้องการแก้ไขออกมาตามรหัส CustomerID
                Customer cs = (from cust in db.Customers
                              
where cust.CustomerID == this.txtCustomerID.Text.Trim()
                              
select cust).FirstOrDefault();                   
               
if (cs != null)//ถ้ามีข้อมูล คือ obj. cs ไม่เป็น null
                {
                   
// assign ค่า ให้ obj. cs
                    cs.ContactName = this.txtContactName.Text.Trim();
                   
cs.CompanyName = this.txtCompanyName.Text.Trim();
                   
cs.Address = this.txtAddress.Text.Trim();
                   
cs.Country = this.txtCountry.Text.Trim();
                   
cs.City = this.txtCity.Text.Trim();
                   
cs.PostalCode = this.txtPostalCode.Text.Trim();
                   
cs.Phone = this.txtPhone.Text.Trim();
                   
//Update ข้อมูล obj. cs ไปที่ Table จริง
                    db.SubmitChanges();
                   
MessageBox.Show("แก้ไขข้อมูล Customer เรียบร้อย", "ผลการทำงาน");

                    dataGridView1.DataSource = from cus in db.Customers where cus.CustomerID == this.txtCustomerID.Text.Trim() select cus;
                   
clearData();
               
}
               
else
                   
MessageBox.Show("ไม่มีข้อมูล CustomerID = " + this.txtCustomerID.Text.Trim(), "ผลการตรวจสอบ");
               
           
} 

3. การ Delete ข้อมูล

ป้อนรหัสลูกค้า แล้วกดปุ่ม delete ข้อมูลลูกค้าของรหัสนั้นๆ จะถูกลบออกจากระบบ

clip_image008

Code: Delete Customer


          
 using (DataClasses1DataContext db = new DataClasses1DataContext())
           
{
               
//db.Log = Console.Out;
                var ch = (from cus in db.Customers where cus.CustomerID == this.txtCustomerID.Text.Trim() select cus).Count ();
               
if (ch > 0)
               
{
                   
//ดึงข้อมูล Customer ที่ต้องการลบ ตาม CustomerID
                    var cs = from cus in db.Customers where cus.CustomerID == this.txtCustomerID.Text.Trim() select cus;
                   
//ลบ ข้อมูล Customer บน LINQ (memory)
                    db.Customers.DeleteAllOnSubmit(cs);
                   
//ลบ ข้อมูลจริงบน Table
                    db.SubmitChanges();

                    MessageBox.Show("ลบข้อมูล Customer เรียบร้อย", "ผลการทำงาน");

                    dataGridView1.DataSource = from cus in db.Customers where cus.CustomerID == this.txtCustomerID.Text.Trim() select cus;
                   
clearData();
               
}
               
else
                   
MessageBox.Show("ไม่มีข้อมูล CustomerID = " + this.txtCustomerID.Text.Trim(), "ผลการตรวจสอบ");
           
}

 

ออกแบบหน้าจอ

1. เปิด Microsoft Visual Studio 2008

2. ไปที่เมนู File :> New Project

ในหน้าต่าง Project types เลือก Visual C#

ในหน้าต่าง Templates เลือก WindowsFormsApplication

3. ใน Form1 ให้ออกแบบ ดังรูป

clip_image009

4. คลิกขวาบน Solution :> Add:> New Item เลือก LINQ to SQL Classes ในช่อง Name ระบบ Default เป็น DataClasses1.dbml สามารถเปลี่ยนชื่อได้ตามใจชอบ ในบทความ ไม้เปลี่ยนแปลง ในหน้า

ในหน้าต่าง The Object Relational Designer… คลิก Server Explorer ให้สร้าง Data Connection โดยเลือก Database Northwind แล้วลาก ตาราง Customers มาวางบน The Object Relational Designer… จากนั้นกด save

clip_image010

หลังจากที่เราลาก ตารางมาวางบน The Object Relational Designer… ระบบจะ map ตารางนั้นๆ เป็น Object ดังรูป

clip_image011

ซ้อมและ ก็ซ้อมนะครับ ขอให้สนุกกับชีวิต โปรแกรมมิ่ง ผิดพลาดประการใด ขอน้อมรับคำแนะนำ และพร้อมแก้ไขในครั้งต่อๆ ไปครับ

เอกสารอ้างอิง:

โดยคุณ banpote_tt
บทความ
– เบื้องต้นเกี่ยวกับ LINQ To SQL:
http://greatfriends.biz?50209
บทความ – LINQ to SQL #03 การใช้คำสั่ง Where: http://greatfriends.biz?52733
บทความ – LINQ To SQL ตอนที่ 2 (รูปแบบการเขียน Query Syntax): http://greatfriends.biz?51002

MSDN
101 LINQ Samples

เกี่ยวกับ

Nuchit Atjanawat is a Microsoft MVP, GreatFriends Community Leader, WindowsITPro Columnist(Mr.Nano), Silverlight Business Application Instructor, Speaker in various Microsoft events, Author, passionate Blogger and a Software Engineer by profession. He has a very good skill over Silverlight, LightSwitch, C#, XAML & Blend. He shares his technical findings, tutorials in his technical blog. Follow his Blog and Facebook page to be updated on latest articles. - Technical Blog: https://janawat.wordpress.com - WindowsITPro Columnist(Mr.Nano): http://windowsitpro.net - The GreatFriends.Biz Community Discussion Board (nano): http://greatfriends.biz - witter: https://twitter.com/janawat - Facebook Page: https://www.facebook.com/nuchit - Instructor: http://bit.ly/GF250-01, http://bit.ly/GF150-02

เขียนใน Windows Application

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

In Archive