GÓC LẬP TRÌNH – Chick Golden

Với SQLExpress để truy vấn dữ liệu ta phải dùng đến các câu lệnh – Query khá phức tạp. Hơn nữa để sử dụng trong ứng dụng C# lại thêm 1 tầng phức tạp nữa với các câu lệnh: dùng ConnectionString khởi tạo kết nối tới DataBase, tự khai báo các biến để chạy 1 lệnh – command, rồi còn phải tính toán đầu ra của câu lệnh… Thật là quá phức tạp nếu như ta có 1 chương trình “khủng”.

Vậy làm thế nào để giải quyết và xử lý yếu tố này ?

Một đề xuất là sử dụng Linq to SQL.

Không chỉ áp dụng cho truy vấn SQL mà LinQ còn có khả năng hỗ trợ trên nhiều nền tảng khác: XML, SQLite, Excel…

Bạn đang đọc : GÓC LẬP TRÌNH

I. LinQ là gì?

Để giảm gánh nặng thao tác trên nhiều ngôn ngữ khác nhau và cải thiện năng suất lập trình, Microsoft đã phát triển giải pháp tích hợp dữ liệu cho .NET Framework có tên gọi là LINQ (Language Integrated Query), đây là thư viện mở rộng cho các ngôn ngữ lập trình C# và Visual Basic.NET (có thể mở rộng cho các ngôn ngữ khác) cung cấp khả năng truy vấn trực tiếp dữ liệu Object, CSDL và XML.

LINQ là một tập hợp những thành phần lan rộng ra được cho phép viết những câu truy vấn tài liệu ngay trong một ngôn từ lập trình, như C # hoặc VB.NET. Khi tạo một đối tượng người tiêu dùng LINQ thì Visual Studio sẽ tự động hóa sinh ra những lớp có những thành phần tương ứng với CSDL của tất cả chúng ta. Khi muốn truy vấn, thao tác với CSDL ta chỉ việc gọi và truy xuất những hàm, thủ tục tương ứng của LINQ mà không cần chăm sóc đến những câu lệnh SQL thường thì .
Tóm lại LINQ sinh ra để giảm công sức của con người cho những quy trình đơn thuần và “ chung chung ” trước đây .

Điểm mạnh ( chưa chắc về độ mạnh, nhưng hay ) của LINQ là “ viết truy vấn cho rất nhiều những đối tượng người tiêu dùng tài liệu ”. Từ CSDL, XML Data Object … thậm chí còn là viết truy vấn cho một biến mảng đã tạo ra trước đó. Vì vậy mới có những khái niệm LinQ to SQL, LinQ to XML, blo bla … .
Tuy nhiên so với quy mô Entity ( Entity Framework ), LINQ có yếu điểm là chậm và thiếu đồng nhất ( tân tiến tất phải hại điện ) .

LINQ có từ bản. NET 3.5, vậy nên tối thiểu chương trình của bạn phải chạy trên nền tảng này .
Visual Studio 2008, hoặc những phiên bản Express của nó là những bộ công cụ tăng trưởng tiêu biểu vượt trội cho ứng dụng dùng LINQ .

II. Sử dụng LinQ

LinQ là gì và tại sao nên dùng LinQ
Câu lệnh SELECT trong SQL được thực hiện bởi LINQ

Trong phần này tôi sẽ sử dụng 1 project demo để những bạn thấy được cách thao tác với LINQ như thế nào ? !

CSDL là 1 bảng tbTest với 2 trường: id (kiểu int, tự động tăng – Identity) và Feild1 (kiểu nvarchar(50)).

1. Khởi tạo đối tượng LinQ to SQL

Trong project chọn Add > Data > LinQ to SQL classes

Ở đây tôi tạo 1 file DB.dbml trong thư mục DB để dễ quản trị .
Sau khi có được file ta triển khai kéo những table thiết yếu vào để tự động hóa sinh những thủ tục LinQ

Vậy là xong, ta đã tạo được những thủ tục thiết yếu để thao tác với LINQ. Easy ? ? ! ! 🙂

2. Truy vấn dữ liệu

Tương tự như Entity ta phải khai báo 1 biến DataContext để tương tác với LinQ

1

DB.DBDataContext db = new DB.DBDataContext(); 

1

Có 2 kiểu truy vấn dữ liệu:
Query Syntax

1
2
3
4
5
6
7
8
9
10
11
12

var abc = from p in db.tbTests

          where p.id > 10

          select p;

var abc = from p in db.tbTests

          where p.id > 10

          select new

          {

              p.id,

              p.Feild1

          };

Method Syntax

1

var xyz = db.tbTests.Where(p => p.id > 10).Select(p => new { p.id, p.Feild1 });

1

Câu truy vấn SQL tương ứng

1
2
3
4

SELECT [id]

      ,[Feild1]

  FROM [dbo].[tbTest]

  WHERE [id] > 10

Chọn từ nhiều bảng theo kiểu Inner Join (lấy những bản ghi có điều kiện thỏa mãn)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

var result = from p in products

             join c in categories on p.CategoryID equals c. CategoryID

             select new

             {

                 ProductName=p.ProductName,

                 CategoryName=c.CategoryName

             };

var result = from p in products

             from c in categories

             where p.ProductName equals c.CategoryName

             select new

             {

                 ProductName=p.ProductName,

Xem thêm : insertion tiếng Anh là gì ?

                 CategoryName=c.CategoryName

             };

var result = products.Join(

             categories,

             p=>p.CategoryID,

             c=>c.CategoryID,

             (p,c) => new

             {

                 ProductName=p.ProductName,

                 CategoryName=c.CategoryName

             });

Cú pháp khác tương tự các câu lệnh trong SQL.
Các biến ở trên trả về có kiểu IEnumrable, 1 loại kiểu dữ liệu giống như List. Các thao tác cơ bản với loại biến này:

  • xyz.FirstOrDefault(): Chọn bản ghi đầu tiên hoặc mặc định
  • xyz.Skip(5): Nhảy qua n bản ghi
  • xyz.Take(5): Lấy n bản ghi đầu tiên
  • xyz.ToList(): Chuyển sang kiểu List
  • xyz.Count(): đếm số bản ghi
  • xyz.Select(…), xyz.Where(…), xyz.Join(…): Các câu lệnh truy vấn theo kiểu Method Syntax
  • bla bla

Đôi khi bạn không tìm được cú pháp thích hợp hoặc LinQ không tương hỗ loại truy vấn mà vốn có trong SQL thì bạn trọn vẹn hoàn toàn có thể thực thi trực tiếp câu lệnh đó trải qua LinQ :

1

var result = db.ExecuteQuery<int>("SELECT NEXT VALUE FOR seq_tbCanBo")

3. Thêm, sửa, xóa dữ liệu thông qua LinQ

Thêm dữ liệu

1
2
3
4

DB.tbTest a = new DB.tbTest();     

a.Feild1 = txtFeild1.Text;     

db.tbTests.InsertOnSubmit(a);  

db.SubmitChanges();    

1

Sửa dữ liệu

1
2
3
4
5

var a = (from p in db.tbTests

         where p.id == int.Parse(txtId.Text)

         select p).FirstOrDefault();

a.Feild1 = txtFeild1.Text;

db.SubmitChanges();

1

Xóa dữ liệu

1
2
3
4
5

var a = (from p in db.tbTests

         where p.id == int.Parse(txtId.Text)

         select p).FirstOrDefault();

db.tbTests.DeleteOnSubmit(a);

db.SubmitChanges();

III. Bindding

Bindding là cách thuận tiện để thay đổi, cập nhật, thêm mới bản ghi ở CSDL một cách dễ dàng trực quan, sử dụng LinQ.
Giả sử ta thực hiện Bindding ở 1 bảng, có 2 chế độ (kiểu hiển thị) là GridView và Detail:

  • Chế độ GridView: có 1 gridview để hiển thị các bản ghi trong bảng, tương tự như khi chúng ta chạy câu truy vấn SELECT * trong SQL
  • Detail: các Control cho phép thay đổi giá trị của bản ghi đang được chọn ở Gridview. Khi click vào 1 hàng ở Gridview thì dữ liệu của hàng đó sẽ được điền tự động vào các Control này.

là cách thuận tiện để biến hóa, update, thêm mới bản ghi ở CSDL một cách thuận tiện trực quan, sử dụng LinQ. Giả sử ta thực thi Bindding ở 1 bảng, có 2 chủ trương ( kiểu hiển thị ) làvà Detail :

Cách dùng Bindding:

Trong chế độ Design form, mở cửa sổ Data Sources, ở đây các bảng trong file DB.dbml (được tạo khi khởi tạo LinQ) sẽ được hiển thị, giúp ta có thể kéo vào trong form của mình

Với mỗi bảng có những tùy chọn để chọn chủ trương xem : Gridview, Detail, …

LinQ là gì và tại sao nên dùng LinQ?
Tạo Bindding bằng cách kéo thả

Sau khi kéo như vậy thì nó sinh ra 1 đối tượng là tbTestBinddingSource, đây chính là đối tượng tương tác với SQL, LinQ.

Quy định nguồn tài liệu cho Bindding :

1
2
3
4
5

tbTestBindingSource.DataSource = db.tbTests;

tbTestBindingSource.DataSource = result;

1

Bạn hoàn toàn có thể kéo 1 BinddingNavigator để triển khai những thao tác thêm, xóa thuận tiện
Khi đã có Bindding như thế này rồi thì việc thêm sửa xóa cực kỳ đơn thuần, không cần code nhiều, sau khi đổi khác trên gridview, detail để lưu tổng thể những biến hóa chỉ cần

1
2

tbTestBindingSource.EndEdit();

db.SubmitChanges();

Các thao tác trọn vẹn hoàn toàn có thể làm với BinddingSource

1
2
3
4
5
6
7
8
9

tbTestBindingSource.RemoveCurrent();   

tbTestBindingSource.MoveFirst();

tbTestBindingSource.MoveLast();

tbTestBindingSource.MoveNext();

tbTestBindingSource.MovePrevious();

tbTestBindingSource.Position = 5;  

Sau số thao tác biến hóa trên grid view, bạn muốn xem số hàng thêm mới, sửa xóa ? ?

1
2
3

int insert = db.GetChangeSet().Inserts.Count;

int update = db.GetChangeSet().Updates.Count;

int delete = db.GetChangeSet().Deletes.Count;

Tham khảo project demo trên tại đây.
Các bạn có thể truy cập liên kết để có thêm thông tin, các thao tác với LINQ.

Lấy từ đây : https://nvnhan2910.blogspot.com/2014/04/linq-linq-la-gi-va-tai-sao-nen-dung-linq.html

Chia sẻ:

Thích bài này:

Thích
Đang tải ...

ĐÁNH GIÁ post
Bài viết liên quan

Tư vấn miễn phí (24/7) 094 179 2255