linq2 sql

25
LTUDQL 2 ©HCMUS . - 1 - LINQ to SQL Bùi Tấn Lộc [email protected]

Upload: dung-dinh

Post on 29-Jun-2015

291 views

Category:

Education


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Linq2 sql

LTUDQL 2

©HCMUS. - 1 -

LINQ to SQL

Bùi Tấn Lộc

[email protected]

Page 2: Linq2 sql

LTUDQL 2

©HCMUS.

LINQ 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 -

Page 3: Linq2 sql

LTUDQL 2

©HCMUS.

Cá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 -

Page 4: Linq2 sql

LTUDQL 2

©HCMUS.

Loạ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 -

Page 5: Linq2 sql

LTUDQL 2

©HCMUS.

Thự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 -

Page 6: Linq2 sql

LTUDQL 2

©HCMUS.

Khởi tạo đối tượng CSDL đã ánh xạ

‘1.Su dung gia tri chuoi connectionstring trong file app.configDim db As New TruongHocDataContext()

‘2.Khong su dung gia tri chuoi connectionstring trong file app.configDim cnStr As StringcnStr = “..”Dim db As New TruongHocDataContext(cnStr)

- 6 -

Page 7: Linq2 sql

LTUDQL 2

©HCMUS.

Truy 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 -

Page 8: Linq2 sql

LTUDQL 2

©HCMUS.

Truy 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 -

Page 9: Linq2 sql

LTUDQL 2

©HCMUS.

Truy vấn dữ liệu – Kiểu trả về không xác định (Anonymous Type)

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 -

Page 10: Linq2 sql

LTUDQL 2

©HCMUS.

Truy 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 -

Page 11: Linq2 sql

LTUDQL 2

©HCMUS.

Truy 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 -

Page 12: Linq2 sql

LTUDQL 2

©HCMUS.

Truy 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 -

Page 13: Linq2 sql

LTUDQL 2

©HCMUS.

Truy vấn dòng đầu tiên

Dim shipper As Shippershipper = db.Shippers.First()

Dim cust = From c In db.CustomersWhere c.CustomerID = "BONAP" Take 1

Dim ord = (From o In db.Orders Where o.Freight > 10DSelect o).First()

- 13 -

Page 14: Linq2 sql

LTUDQL 2

©HCMUS.

Insert 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 -

Page 15: Linq2 sql

LTUDQL 2

©HCMUS.

Insert 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 -

Page 16: Linq2 sql

LTUDQL 2

©HCMUS.

Insert 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 -

Page 17: Linq2 sql

LTUDQL 2

©HCMUS.

Update 1 dòng dữ liệu

Dim cust As Customercust = (From c In db.Customers Where c.CustomerID = "ALFKI" Select c).First()

cust.ContactTitle = "Vice President"db.SubmitChanges()

- 17 -

Page 18: Linq2 sql

LTUDQL 2

©HCMUS.

Update 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 -

Page 19: Linq2 sql

LTUDQL 2

©HCMUS.

Delete 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 -

Page 20: Linq2 sql

LTUDQL 2

©HCMUS.

Delete 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 -

Page 21: Linq2 sql

LTUDQL 2

©HCMUS.

Dùng các stored procedure

'Retrieve products based on adhoc queryDim products As IEnumerable(Of Product)products = From p In db.Products Where p.CategoryID = 1 Select p'Retrieve products instead using a SPROC methodproducts = db.GetProductsByCategory(1)'iterate over resultFor Each item As Product In products '....Next

- 21 -

Page 22: Linq2 sql

LTUDQL 2

©HCMUS.

Phâ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 -

Page 23: Linq2 sql

LTUDQL 2

©HCMUS.

Kế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 -

Page 24: Linq2 sql

LTUDQL 2

©HCMUS.

Tham khảo thêm

• http://msdn.microsoft.com/en-us/vbasic/bb688085

• Project SampleQueries (LinQToSQLSamples.vb)

- 24 -

Page 25: Linq2 sql

LTUDQL 2

©HCMUS.

Câu hỏi?

- 25 -