Linq2 sql

478 views
414 views

Published on

Lý thuyết về LINQ với VB

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
478
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Linq2 sql

  1. 1. LTUDQL 2LINQ to SQL Bùi Tấn Lộc btloc@fit.hcmus.edu.vn . -1- ©HCMUS
  2. 2. LTUDQL 2LINQ to SQL • Là kỹ thuật ORM (Object Relation Mapping) của Microsoft dùng để ánh xạ quan hệ CSDL sang quan hệ đối tượng. • Giúp cho việc lập trình giao tiếp CSDL dễ dàng hơn. • Hỗ trợ những thao tác cơ sở dữ liệu: thêm, xóa, sửa, cập nhật • Hỗ trợ transaction, view, stored procedure . -2- ©HCMUS
  3. 3. LTUDQL 2Các bước thao tác CSDL với LINQ to SQL • Kết nối đến loại CSDL mà LINQ to SQL hỗ trợ • Thực hiện ánh xạ ORM (tạo file <TenCSDL>.dbml). Ví dụ: TruongHoc.dbml • Khởi tạo đối tượng CSDL đã ánh xạ (đối tượng <TenCSDL><DataContext>). Ví dụ: TruongHocDataContext • Sử dụng đối tượng CSDL trên để thao tác CSDL . -3- ©HCMUS
  4. 4. LTUDQL 2Loại CSDL LINQ to SQL hỗ trợ • Chỉ hỗ trợ các loại CSDL sau: • Microsoft SQL Server • Microsoft SQL Server Compact (*.sdf) • Microsft SQL Server Database File (*.mdf) • Lưu ý: Khi tạo report với Crystal Report, Crystal Report chỉ hỗ trợ Microsoft SQL Server, không kết nối trưc tiếp được với *.sdf và *.mdf . -4- ©HCMUS
  5. 5. LTUDQL 2Thực hiện ánh xạ ORM • Tạo file TenCSDL.dbml • Kéo tất cả các bảng vào cửa sổ Design • Có thể kéo các View, Stored Procedure, Function vào cửa sổ Design • Lưu ý khi đã thực hiện ánh xạ trong project sẽ xuất hiện file app.config. Trong file này chứa chuỗi connectionstring. Khi đem ứng dụng qua máy khác chạy ta chỉ cần chỉnh sửa giá trị chuỗi connectionstring trong file này. . -5- ©HCMUS
  6. 6. LTUDQL 2Khởi tạo đối tượng CSDL đã ánh xạ ‘1.Su dung gia tri chuoi connectionstring trong file app.config Dim db As New TruongHocDataContext() ‘2.Khong su dung gia tri chuoi connectionstring trong file app.config Dim cnStr As String cnStr = “..” Dim db As New TruongHocDataContext(cnStr) . -6- ©HCMUS
  7. 7. LTUDQL 2Truy vấn dữ liệu không điều kiện Public Function LayDanhSachKhachHang() As List(Of Customer) Dim db As New NorthwindDataContext() Dim query = From c In db.Customers Select c Return query.ToList() End Function . -7- ©HCMUS
  8. 8. LTUDQL 2Truy vấn dữ liệu có điều kiện Public Function LayDanhSachKhachHangTheoThanhPho _ (ByVal tp As String) As List(Of Customer) Dim db As New NorthwindDataContext() Dim query = From c In db.Customers Where c.City = tp Select c Return query.ToList() End Function . -8- ©HCMUS
  9. 9. LTUDQL 2Truy vấn dữ liệu – Kiểu trả về không xác định (AnonymousType) Public Function LayDanhThongTinKhachHang() As IList Dim db As New NorthwindDataContext() Dim query = From c In db.Customers Select c.ContactName, c.Phone Return query.ToList() End Function . -9- ©HCMUS
  10. 10. LTUDQL 2Truy vấn dữ liệu – Kiểu trả về xác định Public Function LayDanhThongTinKhachHang1() As List(Of ThongTinKhachHang) Dim db As New NorthwindDataContext() Dim query = From c In db.Customers Select New ThongTinKhachHang With {.ContactName = c.ContactName, .Phone = c.Phone} Return query.ToList() End Function • Phải định nghĩa lớp ThongTinKhachHang có thuộc tính ContactName và Phone . - 10 - ©HCMUS
  11. 11. LTUDQL 2Truy vấn dữ liệu với distinct Public Function LayDanhSachThanhPho() As List(Of String) Dim db As New NorthwindDataContext() Dim query = From c In db.Customers Select c.City Distinct Return query.ToList() End Function . - 11 - ©HCMUS
  12. 12. LTUDQL 2Truy vấn với điều kiện AndAlso, OrElse Dim q = From p In db.Products Where p.UnitsInStock <= p.ReorderLevel AndAlso Not p.Discontinued Select p Dim q = From p In db.Products _ Where p.UnitPrice > 10.0# OrElse p.Discontinued Select p . - 12 - ©HCMUS
  13. 13. LTUDQL 2Truy vấn dòng đầu tiên Dim shipper As Shipper shipper = db.Shippers.First() Dim cust = From c In db.Customers Where c.CustomerID = "BONAP" Take 1 Dim ord = (From o In db.Orders Where o.Freight > 10D Select o).First() . - 13 - ©HCMUS
  14. 14. LTUDQL 2Insert 1 dòng dữ liệu Dim newCustomer = New Customer With {.CustomerID = "MCSFT", .CompanyName = "Microsoft", .ContactName = "John Doe", .ContactTitle = "Sales Manager", .Address = "1 Microsoft Way", .City = "Redmond", .Region = "WA", .PostalCode = "98052", .Country = "USA", .Phone = "(425) 555-1234", .Fax = Nothing} db.Customers.InsertOnSubmit(newCustomer) db.SubmitChanges() . - 14 - ©HCMUS
  15. 15. LTUDQL 2Insert 1 dòng dữ liệu 1-many Dim newCategory = New Category With {.CategoryName = "Widgets", .Description = "Widgets are the customer-facing analogues " & "to sprockets and cogs."} Dim newProduct = New Product With {.ProductName = "Blue Widget",.UnitPrice = 34.56#,.Category = newCategory} db.Categories.InsertOnSubmit(newCategory) db.SubmitChanges() . - 15 - ©HCMUS
  16. 16. LTUDQL 2Insert 1 dòng dữ liệu many - many Dim newEmployee = New Employee With {.FirstName = "Kira", .LastName = "Smith"} Dim newTerritory = New Territory With {.TerritoryID = "12345", .TerritoryDescription = "Anytown", .Region = db.Regions.First()} Dim newEmployeeTerritory = New EmployeeTerritory With{.Employee = newEmployee, .Territory = newTerritory} db.Employees.InsertOnSubmit(newEmployee) db.Territories.InsertOnSubmit(newTerritory) db.EmployeeTerritories.InsetOnSubmit(newEmployeeTerritory) db.SubmitChanges() . - 16 - ©HCMUS
  17. 17. LTUDQL 2Update 1 dòng dữ liệu Dim cust As Customer cust = (From c In db.Customers Where c.CustomerID = "ALFKI" Select c).First() cust.ContactTitle = "Vice President" db.SubmitChanges() . - 17 - ©HCMUS
  18. 18. LTUDQL 2Update nhiều dòng dữ liệu Dim query = From p In db.Products _ Where CInt(p.CategoryID.Value) = 1 Select p Dim lst As List (of Product) lst = query.ToList() For Each item As Product In lst item.UnitPrice += 1.0 Next db.SubmitChanges() . - 18 - ©HCMUS
  19. 19. LTUDQL 2Delete một dòng dữ liệu Dim order As Order_Detail order = (From c In db.Order_Details _ Where c.OrderID = 10255 AndAlso c.ProductID = 36 Select c).First() db.Order_Details.DeleteOnSubmit(order) db.SubmitChanges() . - 19 - ©HCMUS
  20. 20. LTUDQL 2Delete nhiều dòng dữ liệu Dim orderDetails = _ From o In db.Order_Details _ Where o.Order.CustomerID = "WARTH" AndAlso o.Order.EmployeeID = 3 Select o Dim order = _ (From o In db.Orders _ Where o.CustomerID = "WARTH" AndAlso o.EmployeeID = 3 _ Select o).First() For Each od As Order_Detail In orderDetails db.Order_Details.DeleteOnSubmit(od) Next db.Orders.DeleteOnSubmit(order) db.SubmitChanges() . - 20 - ©HCMUS
  21. 21. LTUDQL 2Dùng các stored procedure Retrieve products based on adhoc query Dim products As IEnumerable(Of Product) products = From p In db.Products Where p.CategoryID = 1 Select p Retrieve products instead using a SPROC method products = db.GetProductsByCategory(1) iterate over result For Each item As Product In products .... Next . - 21 - ©HCMUS
  22. 22. LTUDQL 2Phân trang truy vấn kết quả Public Function LaySanPham(ByVal startRow As Integer) As IEnumerable(Of Product) Dim db As New NorthwindDataContext() Retrieve products based on adhoc query Dim products As IEnumerable(Of Product) products = From p In db.Products Where p.CategoryID = 1 Select p Return products.Skip(startRow).Take(10) End Function . - 22 - ©HCMUS
  23. 23. LTUDQL 2Kết bảng (join) Public Function TimKiemHocSinhTheoTenLop(ByVal tenLop As String) As List (Of HocSinh) Dim db As New TruongHocDataContext() Dim query = From hs In db.HocSinhs Join lh In db.LopHocs On hs.MaLop Equals lh.Ma Where lh.Ten = tenLop Select hs Return query.ToList() End Function . - 23 - ©HCMUS
  24. 24. LTUDQL 2Tham khảo thêm • http://msdn.microsoft.com/en-us/vbasic/bb688085 • Project SampleQueries (LinQToSQLSamples.vb) . - 24 - ©HCMUS
  25. 25. LTUDQL 2Câu hỏi? . - 25 - ©HCMUS

×