CRUD Data using LINQ
I.Introduction
– Liên tiếp theo phần 1 tìm hiểu về LINQ , trong phần 2 này mình xin chia sẻ cách sử dụng LINQ để thêm sửa xóa dữ liệu SQL Server
– Trước khi đọc bài này mình hy vọng rằng các bạn hãy đọc trước bài
Tìm hiểu về LINQ (phần I)
II. Fundamental
– Để xây dựng một ứng dụng cơ sở dữ liệu, chắc hẳn điều trước tiên là chúng ta phải có một cơ sở dữ liệu và sau đó là xây dựng giao diện, kế đến là xử lý dữ diệu.
– Bước một mình sẽ tạo một cơ sở dữ liệu đơn giản gồm 2 bảng là Student và Class, với Diagram như sau
– Về giao diện các bạn có thể tùy túy chọn công nghệ để xây dựng giao diện, có thể là Web Application(ASP.NET) hay Windows Application (WPF hay Windows Form). ở đây mình dùng WPF tạo giao diện như sau
– Tiếp theo là chúng ta tạo LinQ To SQL Class, về bài này mình đã viết rồi, các bạn có thể tham khảo chi tiết tại đây :
Using LINQ To SQL
– Sau khi tạo xong LINQ to SQL Class thì hệ thống sẽ sinh ra những lớp tương ứng
- Mọi thao tác trên cở sở dữ liệu dùng LINQ đều thông qua lớp DataContext, khởi tạo đối tượng DataContext để sử dụng các thao tác trên LINQ :
MyDBDataContext db = new MyDBDataContext();
1.Create (CRUD)
– vì LINQ mọi thao tác đều thông qua đối tượng, do Create ở đây có nghĩa là tạo đối tượng và thêm đối tượng đó vào cơ sở dữ liệu (có thể hiểu là Insert).
– phần Create này áp dụng cho sự kiện Click của nút thêm trong ứng dụng :
private void btnInsert_Click(object sender, RoutedEventArgs e)
{
String Name = txtName.Text;
String Phone = txtPhone.Text;
String Address = txtAddress.Text;
String Email = txtEmail.Text;
Class StudentClass = cbbClass.SelectedItem as Class;
Student student = new Student()
{
ClassID = StudentClass.ID,
Name = Name,
Phone = Phone,
Address = Address,
Email = Email
};
db.Students.InsertOnSubmit(student);
db.SubmitChanges();
this.FillData();
MessageBox.Show("Thêm thành công");
}
2.Read (CRUD)
– Việc đọc dữ liệu chắc hẳn là không thể thiếu đối với ứng dụng cơ sở dữ liệu, đối với lệnh SQL thì nó là Select, nhưng trong LINQ chỉ thông qua đối tượng tương ứng chúng ta sẽ lấy ra được từ 1 đối tượng, cho đến một tập hợp những đối tượng.
– Việc lấy tất cả đối tượng thông thường chúng ta viết trong hàm FillData, ở đây mình sẽ lấy tất cả dữ liệu đổ vào Datagird :
private void FillData()
{
grvData.ItemsSource = db.Students.ToList() ;
}
– Đối với việc lấy một phần tử cũng rất dể dàng, chúng ta chỉ cần dùng phương thức Single và truyền vào cho nó một điều kiệu theo dạng Lambda :
// Lấy một đối tượng sinh viên có ID = 1
var MyStudent = db.Students.Single(p=>p.ID == 1);
3.Update(CRUD)
– Vì LINQ làm việc theo cơ chể tham chiếu (Data Mapping) thông qua đối tương tham chiếu đến Cơ sở dữ liệu, do đó chúng ta phải lấy ra được đối tượng muốn Update .
– Chúng ta dể dàng hiểu cách Update thông qua đoạn cho nút sửa sau :
void btnUpdate_Click(object sender, RoutedEventArgs e)
{
Student student = grvData.SelectedItem as Student;
var MyStudent = db.Students.Single(p=>p.ID == student.ID);
MyStudent.Name = txtName.Text;
MyStudent.Phone = txtPhone.Text;
MyStudent.Email = txtEmail.Text;
MyStudent.Address = txtAddress.Text;
Class cls = cbbClass.SelectedItem as Class;
MyStudent.ClassID = cls.ID != 1? cls.ID : 1;
db.SubmitChanges();
this.FillData();
MessageBox.Show("Sửa thành công");
}
4.Delete(CRUD)
– Trong LINQ việc Delete có thể là đơn giản nhất, chúng ta chỉ cần chỉ định rõ tử nào để Delete.
void btnDelete_Click(object sender, RoutedEventArgs e)
{
// Lấy từ DataGrid một phần tử
Student student = grvData.SelectedItem as Student;
// Xóa đối tượng Sinh Viên vừa được chọn
db.Students.DeleteOnSubmit(student);
db.SubmitChanges();
this.FillData();
MessageBox.Show("Xóa thành công");
}
Full Code behide source code :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Windows.Controls.Ribbon;
namespace LINQApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : RibbonWindow
{
MyDBDataContext db = new MyDBDataContext();
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
this.grvData.SelectionChanged += new SelectionChangedEventHandler(grvData_SelectionChanged);
this.btnUpdate.Click += new RoutedEventHandler(btnUpdate_Click);
this.btnDelete.Click += new RoutedEventHandler(btnDelete_Click);
// Insert code required on object creation below this point.
}
void btnDelete_Click(object sender, RoutedEventArgs e)
{
// Lấy từ DataGrid một phần tử
Student student = grvData.SelectedItem as Student;
// Xóa đối tượng Sinh Viên vừa được chọn
db.Students.DeleteOnSubmit(student);
db.SubmitChanges();
this.FillData();
MessageBox.Show("Xóa thành công");
}
void btnUpdate_Click(object sender, RoutedEventArgs e)
{
Student student = grvData.SelectedItem as Student;
var MyStudent = db.Students.Single(p=>p.ID == student.ID);
MyStudent.Name = txtName.Text;
MyStudent.Phone = txtPhone.Text;
MyStudent.Email = txtEmail.Text;
MyStudent.Address = txtAddress.Text;
Class cls = cbbClass.SelectedItem as Class;
MyStudent.ClassID = cls.ID != 1? cls.ID : 1;
db.SubmitChanges();
this.FillData();
MessageBox.Show("Sửa thành công");
}
void grvData_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
Student student = grvData.SelectedItem as Student;
txtName.Text = student.Name;
txtEmail.Text = student.Email;
txtAddress.Text = student.Address;
txtPhone.Text = student.Phone;
}
catch
{
grvData.SelectedIndex = 0;
}
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
cbbClass.ItemsSource = null;
cbbClass.ItemsSource = db.Classes.ToList();
this.cbbClass.SelectedItem = db.Classes.ToList()[1];
this.FillData();
grvData.SelectedIndex = 0;
}
private void btnInsert_Click(object sender, RoutedEventArgs e)
{
String Name = txtName.Text;
String Phone = txtPhone.Text;
String Address = txtAddress.Text;
String Email = txtEmail.Text;
Class StudentClass = cbbClass.SelectedItem as Class;
Student student = new Student()
{
ClassID = StudentClass.ID,
Name = Name,
Phone = Phone,
Address = Address,
Email = Email
};
db.Students.InsertOnSubmit(student);
db.SubmitChanges();
this.FillData();
MessageBox.Show("Thêm thành công");
}
private void FillData()
{
grvData.ItemsSource = db.Students.ToList() ;
}
}
}
Lưu ý : sau các thao tác chúng ta phải sử dụng hàm SubmitChange(), để gửi thông thin thao tác trên dữ liệu lên Database, nếu ko gọi hàm này dữ liệu chỉ có thể thêm sửa xóa tạm thời nhưng phía Database hoàn toàn ko đổi
– Hy vọng bài viết này sẽ giúp ích được cho các bạn