LinQ có tên gọi là Language Integrated Query, một thư viện cung cấp cho ngôn ngữ lập trình C# và Visual Basic, giúp quản lí database theo mô hình MVC và kết nối database theo dạng disconnected.Trong bài này tôi muốn chia sẻ kiến thức của bản thân về cách cài đặt và sử dụng LinQ to SQL. Các ví dụ dưới đây tôi sử dụng Visual Studio 2013 Ultimate và SQL Server 2008.
C# SQL Server Bùi Nguyễn Minh Hoàng 2014-10-14 22:35:13

Giới thiệu

Khi viết bất kì một phầm mềm nào cũng đều sử dụng đến database và lúc đó chúng ta thường nghĩ ngay tới vấn đề sử dụng những câu lệnh truy vấn để truy xuất dữ liệu trong database. Những câu lệnh đôi khi rất dài và phức tạp, chưa kế tới việc ta phải xây dựng phần mềm theo mô hình MVC để nâng cao hiệu suất quản lí. Để rút ngắn thời gian cho việc đó tôi sử dụng LinQ to SQL được cung cấp trong .NET Framework. 

Tiền đề bài viết

Trong bài này tôi muốn chia sẻ kiến thức của bản thân về cách cài đặt và sử dụng LinQ to SQL. Các ví dụ dưới đây tôi sử dụng Visual Studio 2013 Ultimate và SQL Server 2008.

Đối tượng hướng đến

Bài này hướng đến những lập trình viên đã từng lập trình trên C# và sử dụng được các câu lệnh truy vấn SQL, việc hiểu rõ được những câu lệnh truy vấn này sẽ giúp ta tiếp cận nhanh hơn với LinQ to SQL.

LinQ to SQL là gì?

LinQ có tên gọi là Language Integrated Query, một thư viện cung cấp cho ngôn ngữ lập trình C# và Visual Basic (trong bài này tôi chỉ hướng dẫn với C#). Thư viện này cung cấp khả năng truy vấn database ngay trên ngôn ngữ lập trình. Khi sử dụng, LinQ sẽ mô phỏng lại cơ sở dữ liệu của bạn và lưu trong trương trình, sau đó mỗi entity sẽ đươc xây dựng thành mỗi class như mô hình MVC, từ đó ta có thể truy xuất database thông qua những class đó.

LinQ to SQL khá phù hợp với những dự án phần mềm như quản lý bán hàng, quản lý của hàng, nhân viên vì nó cung cấp khả năng tạo một database ngay trong SQL Server thông qua mô hình database mà LinQ to SQL được người lập trình cung cấp trong quá trình xây dựng sản phẩm. Việc đó ru ngắn đáng kể thời gian cho lập trình viên và cũng dễ dàng cho người sử dụng cài đặt.

Cài đặt và sử dụng.

Cài đặt

B1. Đầu tiên ta tạo một database có tên Member, trong database này gồm có 2 entity member và article.

ss_1

B2. Kế tiếp ta tạo một project C# -> vào View chọn SQL Server Object Explorer

 

B3. Chọn Add SQL Server và connect vào SQL Server trên máy, kết quả ta được một list các database.

ss_3

ss_4

B4. Chọn Add -> New Item -> chọn LINQ to SQL Classes và đặt lại tên (trong ví dụ này tôi đặt tên cho file là DBMember.dbml), một file có đuôi dbml được tạo ra. Kế tiếp ta chọn tất cả các table trong database muốn sử dụng kéo vào trong file dbml này ta thu được kế quả như sau.

ss_5

Như vậy ta đã tạo xong LinQ to SQL, các class có cùng tên với mỗi entity cũng đã được tạo ra.

Sử dụng

Tôi sẽ hướng dẫn một số cú pháp LinQ cơ bản, trước tiên ta khỏi tạo class DBMemberDataContext, mọi việc truy xuất cơ sở dữ liệu đều thông qua class này.

Selecting

DBMemberDataContext db = new DBMemberDataContext(); 

var name = from table in db.members
           where table.idMember == 0
           select table.Name;

foreach(var a in name)
{
     Console.WriteLine(a);
}

Tôi tạo một một biến tên table và biến này chứa dựng tất cả dữ liệu có trong table member.

Kế tiếp là điều kiện, ở đây điều kiện của tôi là tìm tất cả những những member nào có idMember bằng 0, các bạn có thể lấy theo điều kiện khác tùy loại điều kiện mà ta có số lượng kết quả trả về khác nhau. Và cuối cùng là chọn field mà bạn muốn trả về.

Vì kết quả trả về là màng vì vậy ra dùng foreach để lấy tất cả dữ liệu trong đó.

Trong trường hợp trên ta chỉ có thể lấy được dữ liệu duy nhất đó là field name.

DBMemberDataContext db = new DBMemberDataContext(); // khởi tạo 
var name = from table in db.members
           where table.idMember == 0
           select table;

foreach(var a in name)
{
    Console.WriteLine(a.Name);
    Console.WriteLine(a.Address);
}

Thay vì chỉ lấy được một field ta có thể lấy toàn bộ dữ liệu trong table thông qua điều kiện cho trước và sau đó truy xuất các field mong muốn.

Inserting

DBMemberDataContext db = new DBMemberDataContext();
member mem = new member();

mem.idMember = 1;
mem.Name = "stdio";
mem.Age = 22;
mem.Address = "456 xyz";
db.members.InsertOnSubmit(mem);

db.SubmitChanges();

Đoạn code trên ta dùng để insert một dữ liệu vào database, trong trường hợp này tôi xem nó như một đối tượng. Trước tiên ta tạo ra một đối tượng member và nhập dữ liệu vào các thuộc tính của nó. Tiếp theo ra sử dụng db.members.InsertOnSubmit(mem); để thêm đối tượng này vào nhưng đối tượng này hiện tại chỉ được thêm tạm thời vào DBMemberDataContext nhưng chưa được cập nhật vào databate của SQL Server. Vì vậy ta thêm dòng code db.SubmitChanges(); để đồng bộ tất cả các dữ liệu của project và SQL Server.

Updating

DBMemberDataContext db = new DBMemberDataContext();
var members = from table in db.members
              where table.idMember == 0
              select table;

foreach (var mem in members)
{
    mem.Address = "Tân Bình";
}
db.SubmitChanges();

Đoạn code này sẽ truy vấn đến database để tìm những member nào có idMember bằng 0 và sau đó thay đổi giá trị trong field Address, cuối cùng là đồng bộ lại dữ liệu.

Deleting

DBMemberDataContext db = new DBMemberDataContext();
var members = from table in db.members
              where table.idMember == 0
              select table;

foreach (var mem in members)
{
    db.members.DeleteOnSubmit(mem);
}
db.SubmitChanges();

Ví dụ này thực hiện việc delete một đối tượng có trong members.Cũng như update và insert sau khi dòng code db.members.DeleteOnSubmit(mem); được thực thi thì ta mới chỉ xóa được trên đối tượng trên DBMemberDataContext vì vậy ta dùng db.SubmitChanges(); để cập nhật lại dữ liệu trên SQL Server