Showing posts with label Linq. Show all posts
[Linq to Sql] Sửa dữ liệu
thuvienwinform - Sau bài 1: Load và thêm dữ liệu thì trong bài này mình sẽ giới thiệu code để sửa dữ liệu trong CSDL bằng LINQ to SQL. Các nguyên liệu như CSDL, form vẫn dùng ở bài trước. OK code khá đơn giản thui:
Tải Demo: bài 4
private void btSua_Click(object sender, EventArgs e)//Sửa { //Sửa //Xác định thanh viên cần sửa var thanhVien = (from tv in db.DSLs where tv.HoTen == dgvNoiDung.CurrentRow.Cells["HoTen"].Value.ToString()//Chọn thành viên nào có tên giống tên nhập vào select tv ).SingleOrDefault(); thanhVien.HoTen = txtHoTen.Text; db.SubmitChanges(); Refresh(); }
Giải thích:
SingleOrDefault(): chọn 1 đối tượng mà thôi
Ở đâu mình truy vấn thành viên có tên giống với tên trong txtHoTen sau đó tiến hành gán cho nó tên mới thông qua txtHoTen luôn
[Linq to Sql] Load và Thêm dữ liệu
thuvienwinfom - Để thêm dữ liệu vào CSDL bằng Linq ta cần khai báo thư viện System.Linq (using System.Linq). Thường thì khi ta tạo project mới thì nó đã thêm sẵn dòng này cho ta rồi! OK bây giờ ta sẽ thực hiện việc thêm dữ liệu bằng Linq, 1 nốt nhạc là xong :v
Tải demo: Bài 4
Chuẩn bị: (vì mấy cái này cần cho mấy bài sau nên mọi người mới tập sử dụng Linq nên làm theo y hệt sẽ dễ hiểu hơn)
I. Tạo môi trường luyện tập
1. CSDL
+ Tên bảng: DSL (danh sách lớp)
+ Form mẫu. Các biến như trong hình
+ Add item LINQ to SQL cho form này:
B1: project -> add new item (CS + A)
B2: chọn LINQ to SQL và đặt tên cho nó là: LinqToSql -> ok
B3: Kéo bảng DSL đã tạo vào -> Ctrl + S
Tạo 1 biến db như sau:
LinqToSqlDataContext db = new LinqToSqlDataContext();
OK vậy là đã tạo được môi trường luyện tập...
II. Load dữ liệu từ CSDL ra datagridView bằng LINQ to SQL
Để tiện sử dụng lần sau ta tạo sẵn một thủ tục Refresh như sau:
private void Refresh() { dgvNoiDung.Rows.Clear(); var list = from p in db.DSLs where p.HoTen == p.HoTen//Chọn toàn bộ bảng select p; dgvNoiDung.DataSource = list; }
Giải thích:
var list: khai báo 1 biến chưa có kiểu
form p in db.DSLs
where p.HoTen == p.HoTen
select p; :chọn toàn bộ bảng DSL
OK cho Refresh vào form load là xong viêc load dữ liệu:
private void Form1_Load(object sender, EventArgs e) { //dgvNoiDung.DataSource = db.DSLs;//Cách 1 Refresh();//Cách 2 }
III. Thêm dữ liệu vào CSDL
- Nếu ai đã từng sử dụng ADO.NET thì sẽ cảm thấy nó hơi ngược một chút. Trong ADO.NET thì chúng ta select -> frrom -> where còn trong LINQ to SQL thì from -> where -> select.
- Để thêm 1 họ tên vào bảng DSL ta code như sau:
private void btThem_Click(object sender, EventArgs e)//Sự kiện click btThem { //Thêm mới DSL thanhVien = new DSL();//Tạo 1 thành viên mới thanhVien.HoTen = txtHoTen.Text;//Gán giá trị HoTen của thanhvien db.DSLs.InsertOnSubmit(thanhVien);//Thêm thanhvien này vào csdl db.SubmitChanges();//Xác nhận thay đổi Refresh();//Làm mới lại datagridView }Giải thích:
db.DSLs.InsertOnSubmit: thêm một thành viên vào bảng DSL
db.SubmitChanges: xác nhận thay đổi trong bảng. Nếu không có dòng này thì dữ liệu sẽ không được thêm vào CSDL
Bài 2 sẽ là sửa dữ liệu
[Linq] Giới thiệu
thuvienwinform - Linq(Language Integrated Query - Ngôn ngữ tích hợp truy vấn) là thư viện mở rộng cho các ngôn ngữ lập trình C#, VB,...được Microsoft tích hợp vào .NET Framework (từ phiên bản 3.5).
Linq cho phép chúng ta làm việc với các tập dữ liệu như CSDL, XML, HTML,...qua đó người ra ta phân loại Linq như sau:
Tuy nhiên, trong các bài tiếp theo trong nhãn này mình chỉ nói đến LINQ to SQL!
Như chúng ta đã biết để thao tác với CSDL cũng có thể dùng ADO.NET. Vậy chúng khác nhau như nào?
- Đầu tiên Linq cho phép tạo câu truy vấn ngay trong ngôn ngữ lập trình. Với ADO.NET thì chúng ta phải viết câu truy vấn như một string vậy, điều đó rất khó kiểm lỗi (phải chạy thử mới biết được lỗi)
- Khi thao tác với CSDL (Thêm, sửa, xóa,...) thì Linq đã tự tối ưu cho chúng ta để đảm bảo tốc độ cao nhất. Đơn cử như việc select, trong ADO.NET thì ta sử dụng "select *..." sau đó lọc ra những trường cần dùng, còn Linq thì chỉ select những trường cần chọn mà thôi nên nó sẽ tối ưu hơn. Hay nói cách khác thì Linq đã tối ưu sẵn cho ta rồi!
- Về yêu cầu thì ADO.NET chỉ cần phiên bản .NET 2.0, còn Linq thì yêu cầu phiên bản 3.5
Vậy Linq có phải được tạo ra để thay thế ADO.NET? Không phải, bạn có thể làm việc với Linq mà không dính đến CSDL. Linq to Sql là một phần mở rộng của Linq.
Còn tiếp...