Chào các bạn! Truyen4U chính thức đã quay trở lại rồi đây!^^. Mong các bạn tiếp tục ủng hộ truy cập tên miền Truyen4U.Com này nhé! Mãi yêu... ♥

chuong 6

Chương 6:

Thao tác với dữ liệu

Nội dung chính

 Sử dụng Data Form Wizard

 Biến đổi và lọc dữ liệu

 Truy nhập và sử dụng SQL Server Data

 ADO.NET

 Bắt lỗi dữ liệu

1. Sử dụng Data Form Wizard

 Xây dựng Single-Table Data Form

 Xây dựng Multi-Table Data Form

2. Biến đổi và lọc dữ liệu

 Sử dụng Server Explorer

 Server Explorer là công cụ dùng để quản lý các tài nguyên liên quan đến server

 Để gán dữ liệu, sử dụng nút Data Connection trên Server Explorer và các nút con của nó.

 Bổ sung kết nối dữ liệu vào project từ:

 Data Form Wizard và những kết nối này được tự động hiển thị trên Server Explorer.

 Trực tiếp trên Server Explorer.

Sử dụng Server Explorer

 Server Explorer có thể là nguồn của các thao tác kéo thả:

 Kéo thả CSDL sẽ tạo ra đối tượng SqlConnection

 Kéo thả table, view, table column hoặc view column tạo ra đối tượng SqlDataAdapter.

 Kéo thả stored procedure tạo ra đổi tượng SqlCommand.

 Chú ý: Ba loại đối tượng trên đều nằm trong namespace System.Data. SqlClient.

Lọc dữ liệu

 Là quá trình lựa chọn một số dữ liệu từ tập dữ liệu lớn.

 Lọc dữ liệu với các đối tượng DataView

 Đối tượng DataSet chứa hai tập hợp:

 Tables - được tạo thành từ các đối tượng DataTable

 Relations - được tạo thành từ các đối tượng DataRelation

 Đối tượng DataView hỗ trợ nhiều thông tin hơn DataTable.

 Có thể sắp xếp, lọc các bản ghi từ DataTable để xây dựng lên DataView.

 Lọc ở Server

 Lớp DataView phải lấy hết dữ liệu từ server và lưu trên client. Sau đó, đối tượng DataView mới chọn từ tập dữ liệu đó.

 Sử dụng đối tượng SqlDataAdapter để lọc dữ liệu từ server.

Biến đổi dữ liệu với Lookups

 Lookup là kỹ thuật thay thế một cột dữ liệu bằng một cột dữ liệu khác của cùng một bảng.

3. Truy nhập và sử dụng SQL Server Data

 Nhiều ứng dụng .NET cần phải sử dụng CSDL để lưu trữ dữ liệu lâu dài.

 SQL Server là CSDL thích hợp nhất.

 Namespace System.Data.SqlClient phục vụ cho giao tiếp giữa ứng dụng .NET và SQL Server.

 Ngôn ngữ được sử dụng để giao tiếp với SQL Server là T-SQL.

 Có hai cách để gửi các câu truy vấn T-SQL tới SQL Server để xử lý:

 Sử dụng các truy vấn đặc biệt - được thực hiện một cách trực tiếp

 Sử dụng stored procedure - được lưu trên server.

3.1. Sử dụng truy vấn đặc biệt

 4 câu lệnh T-SQL chính:

 SELECT - l ấy d ữ li ệu t ừ CSDL

 INSERT - b ổ sung d ữ li ệu m ới vào CSDL

 UPDATE - thay đ ổi d ữ li ệu trong CSDL

 DELETE - xoá d ữ li ệu trong CSDL

3.1.1. SELECT

 Một câu SELECT đầy đủ như sau:

SELECT field_list

FROM table_list

WHERE where_clause

GROUP BY group_by_clause

HAVING having_clause

ORDER BY sort_clause

 Mỗi dòng lệnh trên được gọi là một mệnh đề.

 Mệnh đề SELECT và FROM là bắt buộc, các mệnh đề khác có thể tuỳ chọn.

 Ví dụ:

SELECT OrderID, CustomerID

FROM Orders

 Kết quả: trả về là 2 trường OrderID và CustomerID của tất cả các bản ghi trong bảng Order.

SELECT ...

 Để hiển thị toàn bộ các bản ghi trong một bảng.

SELECT * FROM Orders

 Thực hiện các phép tính trong mệnh đề SELECT.

SELECT OrderID, CAST(ShippedDate - OrderDate AS integer) AS Delay

FROM Orders

 Biểu thức ShippedDate - OrderDate tính ra số ngày.

 Hàm CAST yêu cầu SQL Server trả về kết quả là một số kiểu nguyên

 Cột kết quả này được đặt tên là Delay.

SELECT ...

 Lấy trường thông tin từ nhiều bảng.

SELECT OrderID, Customers.CustomerID

FROM Orders, Customers

 Customers.CustomerID là tên đ ầy đ ủ, xác đ ịnh rõ trư ờng d ữ li ệu đư ợc l ấy t ừ b ảng nào.

INNER JOIN

 INNER JOIN cho SQL Server biết cách kết hợp 2 bảng.

SELECT OrderID, Customers.CustomerID

FROM Orders INNER JOIN Customers

ON Orders.CustomerID = Customers.CustomerID

 SQL Server xét từng dòng trong bảng Orders và đối chiếu nó với tất cả các hàng trong bảng Customers xem CustomerID của Order có trùng với CustomerID của Customer không.

 INNER JOIN có thể xuất hiện nhiều lần trong một câu truy vấn, nếu có nhiều hơn hai bảng được kết hợp với nhau.

SELECT Orders.OrderID, Customers.CustomerID, Employees.EmployeeID

FROM Employees INNER JOIN

(Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID)

ON Employees.EmployeeID = Orders.EmployeeID

Mệnh đề WHERE

 Mệnh đề WHERE là mệnh đề điều kiện, nhằm xác định một dòng trong bảng có được xuất hiện trong tập kết quả của câu lệnh SELECT hay không.

SELECT * FROM Orders

WHERE ShipCountry = 'Brazil'

 Kết hợp nhiều điều kiện kiểm tra trong mệnh đề WHERE

SELECT * FROM Orders

WHERE ShipCountry = 'Brazil'

AND Freight > 50 AND OrderDate <= '12/31/97'

Sử dụng ký tự thay thế trong mệnh đề WHERE.

 Ký tự % được thay thế cho 0, 1 hoặc nhiều bất kỳ ký tự nào.

SELECT * FROM Customers

WHERE CustomerID LIKE 'B%'

 Ký tự _ thay thế cho đúng 1 ký tự khác.

SELECT * FROM Customers

WHERE CustomerID LIKE 'BLON_'

 Ký tự " thay thế cho một tập ký tự khác

SELECT * FROM Customers

WHERE CustomerID LIKE 'BLON"'

 Dấu [] cho SQL Server biết có thể so sánh với một ký tự bất kỳ được liệt kê trong tập đã cho.

SELECT * FROM Customers

WHERE CustomerID LIKE 'BLON[D-P]'

 Dấu [^] cho SQL Server biết để loại bỏ các ký tự nằm trong tập đã xác định.

SELECT * FROM Customers

WHERE CustomerID LIKE 'BLON[^A-O]'

Mệnh đề ORDERBY

 Mệnh đề ORDERBY được sử dụng để sắp xếp dữ liệu hiển thị.

SELECT * FROM Customers

WHERE Country = 'Venezuela'

ORDER BY PostalCode ASC

 Từ khoá ASC (tăng dần) hoặc DESC (giảm dần).

 Sắp xếp theo nhiều tiêu chuẩn khác nhau. Nếu tiêu chuẩn thứ nhất bằng nhau thì xét tới tiêu chuẩn thứ hai ...

SELECT * FROM Customers

ORDER BY Country, PostalCode

hoặc

SELECT * FROM Customers

ORDER BY Country ASC, PostalCode DESC

 Sử dụng biểu thức làm tiêu chuẩn sắp xếp.

SELECT * FROM Customers

ORDER BY Len([CompanyName])

Mệnh đề GROUP BY

 Ta coi mệnh đề GROUP BY đã tạo ra các thùng chứa để phân loại dữ liệu.

 SQL Server sẽ kiểm tra từng bản ghi trong bảng và gửi nó vào từng thùng thích hợp.

SELECT Count(CustomerID) AS CustCount, Country

FROM Customers

GROUP BY Country

ORDER BY Count(CustomerID) DESC

hoặc

SELECT Count(CustomerID) AS CustCount, Country

FROM Customers

GROUP BY Country

ORDER BY Country

 Nhóm theo nhiều trường dữ liệu.

SELECT Count(CustomerID) AS CustCount, Region, Country

FROM Customers

GROUP BY Region, Country

 Tạo ra một thùng cho mỗi liên kết giữa trường Region và Country; và phân loại Customer theo cả hai trường này một cách đồng thời.

Mệnh đề HAVING

 Mệnh đề HAVING lọc các kết quả.

SELECT ProductID, Sum(Quantity) AS TotalSales

FROM [Order Details]

WHERE Quantity > 10

GROUP BY ProductID

HAVING Sum(Quantity) > 1000

ORDER BY Sum(Quantity) DESC

 Kết quả: lọc tất cả các bản ghi trong bảng, tính tổng tất cả các hàng có thuộc tính Quantity > 10 và sau đó lọc tiếp các hàng này bằng tiêu chí trong mệnh đề HAVING.

Một số hàm phổ biến

 T-SQL hỗ trợ như:

 Count(): trả về số lượng các bản ghi

 Sum(): tính tổng giá trị các bản ghi

 Avg(): trả về giá trị trung bình của các bản ghi

 Min(): trả về gía trị của bản ghi nhỏ nhất

 Max(): trả về gía trị của bản ghi lớn nhất

3.1.2. INSERT

 Mục đích của lệnh INSERT là bổ sung một hoặc nhiều dòng vào bảng.

INSERT INTO [Order Details]

VALUES (10248, 1, 12.00, 5, 0)

hoặc

INSERT INTO [Order Details]

(OrderID, ProductID, UnitPrice, Quantity, Discount)

VALUES (10248, 2, 12.00, 5, 0)

 Nếu các trường trong bảng có giá trị mặc định hoặc có thể nhận giá trị Null thì ta có thể bỏ qua các trường đó.

 Lấy giá trị từ câu lệnh SELECT để dùng trong câu lệnh SELECT.

INSERT INTO Products (SupplierID, ProductName, CategoryID )

SELECT SupplierID, 'Trout', 8

FROM Suppliers

3.1.3. UPDATE

 Sử dụng câu lệnh UPDATE để cập nhật dữ liệu.

UPDATE Customers

SET ContactName = 'Maria Anderson'

WHERE CustomerID = 'ALFKI'

hoặc cập nhật nhiều trường dữ liệu trong bảng

UPDATE Customers

SET ContactName = 'Maria Anders', City = 'Berlin'

WHERE CustomerID = 'ALFKI'

 Giá trị mới có thể là một biểu thức

UPDATE Products

SET UnitPrice = UnitPrice * 1.1

3.1.4. DELETE

 Câu lệnh DELETE được sử dụng để xoá dữ liệu ra khỏi bảng.

 Nguyên tắc để xây dựng câu truy vấn DELETE:

 Xây dựng câu truy vấn SELECT để liệt kê các bản ghi cần xoá

 Thay từ khoá SELECT bằng DELETE.

DELETE FROM BadCustomers WHERE CustomerID = 'GODOS'

3.2. Sử dụng Stored Procedure

 Stored Procedure được lưu trên SQL Server và chạy nhanh hơn các câu truy vấn đặc biệt.

 Xây dựng Stored Procedure:

 Mở Server Explorer - mở Data Connections - chọn CSDL Northwind - chọn Stored Procedures - nhấn chuột phải trên nút Stored Procedure và chọn New Stored Procedure.

 Nhập câu truy vấn sau:

CREATE PROCEDURE procFranceCustomers

AS

SELECT * FROM Customers

WHERE Country = 'France'

 Thực thi Stored Procedure từ .NET

SqlCommand.CommandText = tên của Stored Procedure

SqlCommand.CommandType = CommandType.StoredProcedure

Sử dụng các tham số trong

Stored Procedure

 SQL Server cho phép truyền thông tin cho Stored Procedure vào lúc thực thi.

CREATE PROC procCustomerSales

@CustomerID char(5), @TotalSales money OUTPUT

AS

SELECT @TotalSales = SUM(Quantity * UnitPrice)

FROM ((Customers INNER JOIN Orders

ON Customers.CustomerID = Orders.CustomerID)

INNER JOIN [Order Details]

ON Orders.OrderID = [Order Details].OrderID)

WHERE Customers.CustomerID = @CustomerID

 @CustomerID và @TotalSales là hai biến (tham số).

 Khi sử dụng Stored Procedure này, phải cung cấp giá trị cho tham số @CustomerID.

 Tham số @TotalSales được đánh dấu là OUTPUT, tức là nó sẽ chứa giá trị trả về sau khi thực hiện xong Stored Procedure.

 Đối tượng SqlCommand có một tập các tham số hỗ trợ quản lý các Stored Procedure được tham số hoá.

Sử dụng biến @@IDENTITY

 SQL Server có thể tự sinh ra giá trị cho một cột khoá chính trong bảng mỗi khi ta bổ sung thêm một hàng mới.

 SQL Server cung cấp biến @@IDENTIFY trả về giá trị mới nhất vừa được gán cho cột khoá chính tự động.

4. ADO.NET

 ADO.NET là tên của tập các lớp nằm trên namespace:

 System.Data, System.Data.Common,

 System.Data.SqlTypes,

 System.Data.SqlClient,

 System.Data.OleDb;

 ADO.NET được .NET Framework hỗ trợ làm việc với các CSDL quan hệ.

 Mô hình đối tượng ADO.NET được chia thành 2 tập đối tượng khác nhau:

 Data Provider: quản lý CSDL

 DataSet: quản lý mô hình dữ liệu

4.1. Data Provider

 Có 5 loại đối tượng Data Provider:

 Connection,

 Command,

 Parameter,

 DataReader,

 DataAdapter.

Data Provider ...

 Namespace System.Data.SqlClient chứa SQL Server Data Provider, bao gồm các đối tượng sau:

 SqlConnection,

 SqlCommand,

 SqlParameter,

 SqlDataReader,

 SqlDataAdapter.

 Namespace System.Data.OleDb chứa OLE DB Data Provider, bao gồm các đối tượng sau:

 OleDbConnection,

 OleDbCommand,

 OleDbParameter,

 OleDbDataReader,

 OleDbDataAdapter.

 OLE DB Data Provider được thiết kế để làm việc với SQL Server, Jet 4.0, và Oracle OLE DB Provider.

 Chú ý: Tất cả các kỹ thuật áp dụng trên SQL Server Data Provider đều có thể áp dụng trên các đối tượng Data Provider khác.

SqlConnection

 SqlConnection biểu diễn một kết nối liên tục tới nguồn dữ liệu SQL Server. ADO.NET tự động tạo ra một tập các kết nối.

 BeginTransaction(): khởi tạo một phiên mới trên đối tượng SqlConnection.

 Close(): trả về đối tượng SqlConnection cho tập kết nối ban đầu.

 ConnectionString: xác định server mà đối tượng SqlConnection sử dụng

 DataSource - xác định tên của server muốn kết nối tới.

 Initial Catalog - xác định tên của CSDL sử dụng trên server.

 Thông tin xác thực.

 SSPI để dùng cho Windows authentication

 UserID=username;Password=password để dùng cho SQL Server authentication.

 CreateCommand(): trả về đối tượng SqlCommand

 Open(): trả về đối tượng SqlConnection

 Hầu hết các đối tượng SqlConnection đều được tạo ra bằng cách kéo thả.

SqlCommand và SqlParameter

 SqlCommand biểu diễn những gì cần phải thực hiện, như: câu truy vấn đặc biệt hoặc tên của Stored Procedure.

 SqlParameter biểu diễn một tham số của Stored Procedure.

 Một số thành phần quan trọng của đối tượng SqlCommand:

 CommandText: xác định câu lệnh cần đối tượng SqlCommand thực hiện.

 CommandType: xác định kiểu câu lệnh cần thực hiện.

 Connection: xác định đối tượng SqlConnection mà SqlCommand sử dụng.

 CreateParameter(): tạo ra đối tượng SqlParameter cho đối tượng SqlCommand

 ExecuteNonQuery(): thực hiện SqlCommand mà không trả về kết quả.

 ExecuteReader(): thực hiện SqlCommand và trả kết quả vào đối tượng SqlDataReader

 ExecuteScalar(): thực hiện SqlCommand và trả cột đầu tiên của dòng đầu tiên trong tập kết quả.

 Parameters: chứa tập hợp các đối tượng SqlParameter của đối tượng SqlCommand

SqlDataReader

 SqlDataReader là đối tượng được thiết kế nhằm lấy dữ liệu từ CSDL một cách nhanh nhất.

 SqlDataReader được tạo ra bằng cách gọi phương thức ExecuteReader() của SqlCommand.

 Chỉ có thể đọc kết quả chứa trong đối tượng SqlDataReader từ đầu đến cuối và không thể thay đổi nó.

 Khi gọi phương thức SqlDataReader.Read() thì nó sẽ load hàng dữ liệu kế tiếp.

 Nếu không có hàng nào được load thì phương thức Read() sẽ trả về false để báo hết dữ liệu.

 SqlDataReader cung cấp các phương thức để lấy thứ tự của cột đó và trả về dữ liệu của cột; như GetString(), GetValue() ...

 Không thể thực hiện SqlCommand có cùng đối tượng SqlConnection với SqlDataReader đang được mở.

 Nên sử dụng phương thức Close() của SqlDataReader sau khi đã lấy xong dữ liệu.

SqlDataAdapter

 SqlDataAdapter cung cấp cầu nối giữa các đối tượng Data Provider và DataSet.

 DeleteCommand: xác định đối tượng SqlCommand được sử dụng để xoá các hàng trong nguồn dữ liệu.

 Fill(): truyền dữ liệu từ nguồn dữ liệu tới DataSet.

 InsertCommand: xác định đối tượng SqlCommand được sử dụng để bổ sung các hàng vào nguồn dữ liệu.

 SelectCommand: xác định đối tượng SqlCommand được sử dụng để lấy các hàng từ nguồn dữ liệu.

 Update(): truyền dữ liệu từ DataSet lên nguồn dữ liệu.

 UpdateCommand: xác định đối tượng SqlCommand được sử dụng để cập nhật các hàng từ nguồn dữ liệu.

4.2. DataSet

 DataSet biểu diễn dữ liệu ở mức trừu tượng.

 AcceptChanges(): đánh dấu tất cả các thay đổi trong đối tượng DataSets đã được chấp nhận

 Clear(): xoá tất cả dữ liệu trong DataSet

 GetChanges(): trả về đối tượng DataSet chỉ chứa những dữ liệu đã bị thay đổi.

 Merge(): trộn 2 đối tượng DataSet

 Relations: xác định tập hợp các đối tượng DataRelation của DataSet

 Tables: xác định tập hợp các đối tượng DataTable của DataSet.

DataTable

 DataTable biểu diễn một bảng trong DataSet.

 DataSet có thể chứa nhiều DataTable.

 ChildRelations: xác định tập hợp các đối tượng DataRelation trỏ tới con của đối tượng DataTable.

 Clear(): xoá tất cả dữ liệu trong đối tượng DataTable.

 ColumnChanged(): sự kiện xảy ra khi dữ liệu tại một cột bị thay đổi.

 ColumnChanging(): sự kiện xảy ra khi dữ liệu tại một cột đang bị thay đổi.

 Columns: xác định tập hợp các đối tượng DataColumn

 Constraints: xác định tập hợp các đối tượng Constraint

 NewRow(): tạo ra một hàng mới, rỗng trong DataTable

 ParentRelations: xác định tập hợp các đối tượng DataRelation trỏ tới cha của đối tượng DataTable.

 PrimaryKey: xác định một mảng các đối tượng DataColumn, cung cấp khoá chính cho đối tượng DataTable.

 RowChanged(): sự kiện xảy ra khi dữ liệu trong đối tượng DataRow bị thay đổi.

 RowChanging(): sự kiện xảy ra khi dữ liệu trong đối tượng DataRow đang bị thay đổi.

 RowDeleted(): sự kiện xảy ra khi một hàng bị xoá.

 RowDeleting(): sự kiện xảy ra khi một hàng đang bị xoá.

 Rows: xác định tập hợp các đối tượng DataRow.

 Select(): xác định mảng các đối tượng DataRow thoả mãn tiêu chuẩn lựa chọn.

 TableName: xác định tên của đối tượng DataTable.

DataRelation

 DataSet có thể biểu diễn cấu trúc và dữ liệu của toàn bộ CSDL quan hệ.

 DataRelation lưu thông tin về quan hệ giữa các DataTable trong DataSet.

 ChildColumns: xác định tập hợp các đối tượng DataColumn là khoá ngoại trong quan hệ.

 ChildKeyConstraint: trả về đối tượng ForeignKeyConstraint trong quan hệ.

 ChildTable: xác định đối tượng DataTable ở phía khoá ngoại trong quan hệ.

 ParentColumns: xác định tập hợp các đối tượng DataColumn là khoá chính trong quan hệ

 ParentKeyConstraint: trả về đối tượng PrimaryKeyConstraint trong quan hệ.

 ParentTable: xác định đối tượng DataTable ở phía khoá chính trong quan hệ.

 RelationName: xác định tên của quan hệ.

DataRow

 DataRow biểu diễn một hàng dữ liệu.

 Khi lấy dữ liệu, bổ sung, cập nhật và xoá dữ liệu trong đối tượng DataSet, ta thường phải làm với các đối tượng DataRow.

 BeginEdit(): bắt đầu biên tập đối tượng DataRow.

 CancelEdit(): ngừng tiến trình soạn thảo.

 Delete(): xoá đối tượng DataRow ra khỏi đối tượng DataTable là cha của nó.

 EndEdit(): kết thúc quá trình biên tập và lưu tất cả sự thay đổi.

 IsNull(): trả về true nếu cột đã cho chứa giá trị Null.

 RowState: trả về thông tin trạng thái hiện thời của đối tượng DataRow.

DataColumn

 DataColumn biểu diễn một cột trong DataSet.

 Bằng cách sử dụng các đối tượng DataColumn, ta có thể xác định sự thay đổi cấu trúc của DataTable.

 AllowDbNull: chỉ ra liệu DataColumn có thể chứa các giá trị Null.

 AutoIncrement: chỉ ra liệu DataColumn có phải là identity column

 ColumnName: tên của DataColumn

 DataType: kiểu của DataColumn

 DefaultValue: giá trị mặc định của DataColumn khi có một hàng dữ liệu mới được bổ sung.

 MaxLength: kích thước lớn nhất chứa trong DataColumn.

 Unique: xác định giá trị trong DataColumn có phải là duy nhất trong tất cả các hàng trong DataTable.

DataView

 DataView biểu diễn khung nhìn của dữ liệu chứa trong DataTable.

 DataView có thể chứa tất cả các đối tượng DataRow, hoặc chỉ một số hàng đã được lọc.

 AddNew(): bổ sung một hàng mới vào DataView.

 AllowDelete: chỉ ra có thể thực hiện thao tác xoá trên DataView.

 AllowEdit: chỉ ra có thể thực hiện thao tác cập nhật trên DataView.

 AllowNew: chỉ ra có thể thực hiện thao tác bổ sung trên DataView.

 Count: số lượng các hàng trên DataView

 Delete(): xoá một hàng trong DataView

 Find(): tìm một hàng trong DataView

 FindRows(): tìm một mảng các hàng thoả mãn điều kiện lặp.

 Sort: sắp xếp dữ liệu trong DataView

Sử dụng DataSet

 Trước khi ta sử dụng dữ liệu trong DataSet, ta phải lấy dữ liệu về DataSet.

 Quá trình lấy dữ liệu về DataSet gồm 4 bước:

 Xây dựng đối tượng SqlConnection để kết nối với CSDL

 Xây dựng đối tượng SqlCommand để lấy dữ liệu cần thiết

 Gán đối tượng SqlCommand cho thuộc tính SelectCommand của đối tượng SqlDataAdapter.

 Gọi phương thức Fill của đối tượng SqlDataAdapter.

Sử dụng đối tượng DataSet trên nhiều bảng

 DataSet có thể chứa nhiều DataTable.

 B ằng cách s ử d ụng DataAdapter, có th ể k ết n ối m ột đ ối tư ợng DataSet v ới nhi ều b ảng trong CSDL SQL Server.

 Đ ịnh ngh ĩa các đ ối tư ợng DataRelation đ ể bi ểu di ễn cho các quan h ệ gi ữa các đ ối tư ợng DataTable trong DataSet.

Soạn thảo dữ liệu với ADO.NET

 Khi soạn thảo dự liệu, chúng ta phải chú ý tới sự khác biệt giữa mô hình dữ liệu và CSDL.

 Khi thay đổi dữ liệu trên mô hình dữ liệu, thì những thay đổi này không được thể hiện trong CSDL, cho đến khi gọi phương thức Update() của SqlDataAdapter.

Cập nhật dữ liệu

 Gán giá trị mới cho các thành phần trong DataRow.

 Gọi phương thức Update() của SqlDataAdapter để ghi những thay đổi này lên CSDL.

 Phải gán thuộc tính UpdateCommand của SqlDataAdapter với một đối tượng SqlCommand thích hợp.

Bổ sung dữ liệu

 Gán đối tượng SqlCommand cho thuộc tính InsertCommand của đối tượng SqlDataAdapter.

Xoá dữ liệu

 DataRow hỗ trợ phương thức Delete() để xoá toàn bộ đối tượng DataRow trên DataTable.

 Gọi phương thức SqlDataAdapter.Update() để ghi những thay đổi này lên CSDL.

Soạn thảo trên điều khiển DataGrid

 Nếu ta kết nối DataSet với điều khiển DataGrid, thì DataGrid cho phép thực hiện 3 thao tác soạn thảo cơ bản:

 C ập nh ật d ữ li ệu trên m ột hàng, b ằng cách ch ọn c ột c ần c ập nh ật và nh ập giá tr ị m ới

 B ổ sung hàng m ới, b ằng cách di chuy ển t ới cu ối danh sách và nh ập các giá tr ị vào dòng cu ối cùng trong DataGrid

 Xoá hàng

5. Bắt lỗi dữ liệu

 Bắt lỗi CSDL

 Trong namespace System.Data.SqlClient có 2 đối tượng giúp bắt các lỗi liên quan đến SQL Server là: SqlException và SqlError

 Bắt lỗi nhiều người sử dụng

 Khi tạo ra đối tượng SqlCommand và để gán thuộc tính UpdateCommand của SqlDataAdapter, phải lựa chọn 2 chiến lược để giải quyết xung đột:

 Tối ưu hoá điều khiển song song - cập nhật một hàng thành công chỉ khi hàng đó không còn sự thay đổi sau khi đã được load về DataSet.

 Điều khiển song song "Last one wins" - cập nhật một hàng luôn luôn thành công miễn là hàng đó tồn tại.

Bạn đang đọc truyện trên: Truyen4U.Com

Tags: #chương