linq2 sql

Post on 29-Jun-2015

291 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

LTUDQL 2

©HCMUS. - 1 -

LINQ to SQL

Bùi Tấn Lộc

btloc@fit.hcmus.edu.vn

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

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 -

LTUDQL 2

©HCMUS.

Tham khảo thêm

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

• Project SampleQueries (LinQToSQLSamples.vb)

- 24 -

LTUDQL 2

©HCMUS.

Câu hỏi?

- 25 -

top related