Bài 01: Tổng Quan Toàn Diện Về ADO.NET - Lịch Sử, Đặc Điểm & Mô Hình

Tài liệu nghiên cứu 01 tong quan ado, tổng hợp lý thuyết và thực hành, cung cấp kiến thức chuyên sâu về ., phục vụ nghiên cứu và ứng dụng thực tiễn

Chuyên ngành

Cơ sở dữ liệu

Người đăng

Ẩn danh

Thể loại

Bài giảng/Giáo trình
58
1
0

Phí lưu trữ

30 Point

Tóm tắt

I. Tổng quan ADO

ADO.NET (ActiveX Data Object .NET) là một tập hợp các lớp và thư viện trong .NET Framework của Microsoft, được thiết kế để cung cấp một cầu nối toàn diện và hiệu quả giữa ứng dụng và các nguồn dữ liệu. Công nghệ này là sự phát triển vượt bậc từ nền tảng ADO (ActiveX Data Object) trước đó, mang đến một kiến trúc hoàn toàn mới để giải quyết các thách thức trong việc tương tác với cơ sở dữ liệu (CSDL) trong môi trường phân tán và dựa trên web. Thay vì chỉ là một phiên bản nâng cấp, ADO.NET được xây dựng lại từ đầu để tận dụng sức mạnh của XML và kiến trúc hướng đối tượng của .NET Framework. Mục tiêu chính của ADO.NET là cung cấp một mô hình truy cập dữ liệu linh hoạt, cho phép các nhà phát triển làm việc với dữ liệu ở cả hai chế độ: kết nối liên tục và ngắt kết nối. Đặc điểm nổi bật nhất của ADO.NETmô hình ngắt kết nối (disconnected), cho phép ứng dụng lấy một bản sao của dữ liệu từ CSDL, sau đó ngắt kết nối để thực hiện các thao tác xử lý. Điều này giúp giải phóng tài nguyên máy chủ, tăng khả năng mở rộng (scalability) và cải thiện hiệu suất đáng kể cho các ứng dụng, đặc biệt là ứng dụng web có lưu lượng truy cập cao. Kiến trúc của ADO.NET bao gồm hai thành phần chính: .NET Data ProviderDataSet. .NET Data Provider chịu trách nhiệm kết nối trực tiếp đến nguồn dữ liệu và thực thi các lệnh, trong khi DataSet là một biểu diễn dữ liệu trong bộ nhớ, độc lập với nguồn dữ liệu gốc. Sự kết hợp giữa hai thành phần này tạo nên một nền tảng mạnh mẽ, cho phép xử lý dữ liệu phức tạp một cách dễ dàng và hiệu quả.

1.1. Khái niệm cốt lõi ADO.NET là gì và vai trò của nó

Về cơ bản, ADO.NET là một công nghệ cốt lõi trong .NET Framework, cung cấp các lớp đối tượng và hàm thư viện chuyên dụng cho việc kết nối và xử lý dữ liệu. Vai trò của nó không chỉ dừng lại ở việc truy vấn hay cập nhật dữ liệu. Nó còn định hình cách các ứng dụng .NET tương tác với nhiều loại nguồn dữ liệu khác nhau, từ các hệ quản trị CSDL quan hệ như SQL Server, Oracle cho đến các tệp XML và các nguồn dữ liệu phi quan hệ khác. Theo tài liệu gốc, ADO.NET được phát triển từ nền tảng ADO nhưng mang trong mình "ý tưởng thiết kế hoàn toàn mới". Sự mới mẻ này thể hiện qua việc tích hợp sâu với XML làm chuẩn giao tiếp, giúp việc trao đổi dữ liệu qua Internet trở nên dễ dàng hơn bao giờ hết. Vai trò của ADO.NET là cung cấp một kiến trúc nhất quán để các lập trình viên có thể làm việc với dữ liệu mà không cần quan tâm đến chi tiết kỹ thuật của nguồn dữ liệu cụ thể, từ đó tăng tốc độ phát triển và bảo trì ứng dụng.

1.2. Quá trình phát triển từ ADO đến .NET Framework

Lịch sử phát triển của công nghệ truy cập dữ liệu Microsoft đã trải qua nhiều giai đoạn, từ Native API, ODBC, đến ADO và cuối cùng là ADO.NET. ADO, dựa trên công nghệ COM, hoạt động hiệu quả trong môi trường client-server nhưng lại gặp nhiều hạn chế khi ứng dụng trên Internet. Điểm yếu lớn nhất của ADO là mô hình hướng kết nối (connection-oriented), yêu cầu phải duy trì kết nối liên tục trong suốt quá trình xử lý, gây lãng phí tài nguyên và giảm khả năng mở rộng. ADO.NET ra đời cùng với .NET Framework để khắc phục những nhược điểm này. Nó kế thừa các ưu điểm của ADO nhưng được thiết kế lại hoàn toàn để phù hợp với môi trường web phân tán. Việc chuyển từ đối tượng Recordset của ADO sang DataSet trong ADO.NET là một bước tiến mang tính cách mạng, cho phép dữ liệu được biểu diễn dưới dạng một cơ sở dữ liệu thu nhỏ trong bộ nhớ, hỗ trợ hoàn toàn mô hình ngắt kết nối.

II. Thách thức mô hình kết nối và giải pháp từ ADO

Một trong những thách thức lớn nhất trong phát triển ứng dụng, đặc biệt là ứng dụng web, là quản lý kết nối đến cơ sở dữ liệu một cách hiệu quả. Việc duy trì quá nhiều kết nối mở đồng thời có thể làm cạn kiệt tài nguyên máy chủ, dẫn đến hiệu suất kém và khả năng mở rộng bị hạn chế. Đây chính là vấn đề mà mô hình ngắt kết nối của ADO.NET ra đời để giải quyết. Mô hình này thay đổi hoàn toàn cách tiếp cận truyền thống. Thay vì giữ kết nối mở trong suốt quá trình người dùng thao tác, ứng dụng chỉ kết nối đến CSDL trong một khoảng thời gian ngắn để lấy hoặc cập nhật dữ liệu. Sau khi hoàn tất, kết nối sẽ được đóng lại và trả về pool, sẵn sàng phục vụ cho các yêu cầu khác. Dữ liệu được lấy về và lưu trữ trong một đối tượng DataSet trong bộ nhớ. Mọi thao tác như thêm, sửa, xóa đều được thực hiện trên DataSet này. Chỉ khi nào người dùng quyết định lưu các thay đổi, ứng dụng mới mở lại một kết nối ngắn để đồng bộ dữ liệu từ DataSet trở lại CSDL. Giải pháp này của ADO.NET mang lại nhiều lợi ích thiết thực: tối ưu hóa việc sử dụng tài nguyên, tăng cường đáng kể khả năng mở rộng của ứng dụng và cho phép người dùng làm việc ngoại tuyến (offline) với dữ liệu. Tuy nhiên, nó cũng đặt ra những thách thức mới như việc xử lý xung đột dữ liệu khi nhiều người dùng cùng cập nhật một bản ghi. ADO.NET cũng cung cấp các cơ chế để giải quyết vấn đề này.

2.1. Hạn chế của môi trường kết nối liên tục Connected

Môi trường kết nối liên tục (connected), đặc trưng của công nghệ ADO cũ, yêu cầu mỗi người dùng phải có một kết nối cố định tới nguồn dữ liệu trong suốt phiên làm việc. Mặc dù mô hình này có ưu điểm là dữ liệu luôn được cập nhật mới nhất và dễ dàng kiểm soát sự đồng bộ, nó lại bộc lộ nhiều nhược điểm chí mạng. Tài liệu gốc chỉ ra rằng mô hình này yêu cầu "một kết nối mạng cố định" và có khả năng mở rộng (scalability) rất kém. Trong các ứng dụng web hiện đại, nơi hàng ngàn người dùng có thể truy cập đồng thời, việc duy trì kết nối liên tục cho mỗi người là không khả thi. Nó sẽ nhanh chóng làm quá tải máy chủ CSDL, gây ra tình trạng nghẽn cổ chai và làm giảm hiệu suất toàn hệ thống. Hơn nữa, việc giữ kết nối mở liên tục cũng tiềm ẩn các rủi ro về bảo mật.

2.2. Ưu điểm vượt trội của kiến trúc ngắt kết nối

Kiến trúc ngắt kết nối (disconnected) là trái tim của ADO.NET. Trong mô hình này, một bản sao dữ liệu được lấy từ CSDL và đưa vào bộ nhớ của ứng dụng dưới dạng một DataSet. Sau đó, kết nối vật lý tới CSDL được đóng lại. Mọi thao tác của người dùng đều diễn ra trên bản sao dữ liệu này. Ưu điểm của phương pháp này rất rõ ràng: nó giải phóng tài nguyên cho máy chủ, cho phép nhiều người dùng khác kết nối và làm việc. Ứng dụng có thể hoạt động hiệu quả hơn, phản hồi nhanh hơn vì không phải chờ đợi các thao tác trên mạng. Tài liệu gốc nhấn mạnh, mô hình này "nâng cao hiệu suất thực hiện của ứng dụng" và cho phép người dùng "làm việc bất cứ lúc nào". Mặc dù có nhược điểm là dữ liệu có thể không phải là phiên bản mới nhất và có thể xảy ra tranh chấp khi cập nhật, ADO.NET cung cấp các cơ chế xử lý xung đột để giải quyết vấn đề này một cách hiệu quả.

III. Phương pháp dùng

Thành phần đầu tiên và là cửa ngõ để mọi ứng dụng ADO.NET tương tác với cơ sở dữ liệu chính là .NET Data Provider. Đây là một tập hợp các lớp đối tượng được tối ưu hóa để kết nối đến một nguồn dữ liệu cụ thể, thực thi các lệnh và truy xuất kết quả. Mỗi .NET Data Provider được thiết kế riêng cho một hệ quản trị CSDL nhất định, ví dụ như System.Data.SqlClient cho Microsoft SQL Server hay System.Data.OracleClient cho Oracle. Việc sử dụng provider chuyên dụng giúp đạt được hiệu suất cao nhất vì nó giao tiếp trực tiếp với CSDL mà không cần thông qua các lớp trung gian như OLE DB hay ODBC. Cấu trúc của một .NET Data Provider bao gồm bốn đối tượng cốt lõi: Connection, Command, DataReader, và DataAdapter. Mỗi đối tượng có một vai trò riêng biệt và phối hợp với nhau để tạo thành một quy trình truy cập dữ liệu hoàn chỉnh. Connection chịu trách nhiệm thiết lập và quản lý kênh giao tiếp. Command dùng để đóng gói và thực thi các câu lệnh SQL hoặc các thủ tục lưu trữ. DataReader cung cấp một cách hiệu quả để đọc dữ liệu theo kiểu forward-only và read-only. Cuối cùng, DataAdapter đóng vai trò là cầu nối quan trọng giữa nguồn dữ liệu và đối tượng DataSet trong mô hình ngắt kết nối. Hiểu rõ cách hoạt động và sử dụng thành thạo các đối tượng này là chìa khóa để khai thác tối đa sức mạnh của ADO.NET trong việc xây dựng các ứng dụng dữ liệu hiệu suất cao.

3.1. Đối tượng Connection Quản lý kết nối đến Data Source

Đối tượng Connection là thành phần cơ bản nhất, chịu trách nhiệm quản lý việc đóng và mở kết nối đến nguồn dữ liệu (Data Source). Trước khi có thể thực hiện bất kỳ thao tác nào với CSDL, một đối tượng Connection phải được khởi tạo và cấu hình. Thuộc tính quan trọng nhất của nó là ConnectionString, một chuỗi ký tự chứa tất cả thông tin cần thiết để xác định và xác thực với máy chủ CSDL, bao gồm địa chỉ máy chủ, tên cơ sở dữ liệu, và thông tin đăng nhập. Các phương thức chính của đối tượng này là Open() để thiết lập kết nối và Close() để đóng kết nối, giải phóng tài nguyên. Việc quản lý kết nối hiệu quả, tức là mở kết nối ngay trước khi cần và đóng ngay sau khi hoàn thành, là một nguyên tắc quan trọng để đảm bảo hiệu suất và khả năng mở rộng của ứng dụng.

3.2. Đối tượng Command Cách thực thi các lệnh truy vấn SQL

Sau khi kết nối được thiết lập, đối tượng Command được sử dụng để thực thi các lệnh lên CSDL. Đối tượng này cho phép gửi các câu lệnh SQL (như SELECT, INSERT, UPDATE, DELETE) hoặc gọi các thủ tục lưu trữ (Stored Procedures). Thuộc tính CommandText dùng để chứa câu lệnh cần thực thi, và thuộc tính Connection chỉ định kết nối sẽ được sử dụng. Command cung cấp nhiều phương thức thực thi khác nhau tùy thuộc vào loại lệnh: ExecuteReader() trả về một đối tượng DataReader, ExecuteNonQuery() dùng cho các lệnh không trả về dữ liệu (như INSERT, UPDATE) và trả về số dòng bị ảnh hưởng, ExecuteScalar() chỉ trả về một giá trị duy nhất từ kết quả truy vấn. ADO.NET cũng hỗ trợ mạnh mẽ việc tham số hóa câu lệnh, giúp tăng hiệu suất và ngăn chặn các cuộc tấn công SQL Injection.

3.3. DataReader Phương pháp đọc dữ liệu tuần tự chỉ đọc

Khi cần đọc một lượng lớn dữ liệu từ CSDL một cách nhanh chóng và tiết kiệm bộ nhớ, DataReader là lựa chọn tối ưu. Đây là một đối tượng cung cấp cơ chế truy xuất dữ liệu chỉ đọc (read-only) và chỉ tiến (forward-only). Dữ liệu không được tải toàn bộ vào bộ nhớ cùng một lúc; thay vào đó, DataReader đọc từng dòng một trực tiếp từ kết quả trả về của câu lệnh SELECT. Điều này làm cho nó cực kỳ hiệu quả về mặt bộ nhớ. Phương thức Read() được sử dụng để di chuyển đến dòng tiếp theo, và dữ liệu của từng cột có thể được truy cập thông qua chỉ số hoặc tên cột. Vì DataReader duy trì một kết nối mở trong suốt quá trình đọc, điều quan trọng là phải đóng nó (Close()) ngay khi đọc xong để giải phóng kết nối cho các tác vụ khác. Đây là công cụ lý tưởng cho các tác vụ như hiển thị dữ liệu trên giao diện hoặc xử lý dữ liệu theo luồng.

IV. Bí quyết sử dụng DataSet và DataAdapter trong ADO

Nếu .NET Data Provider là thành phần đại diện cho chế độ kết nối, thì DataSet chính là trái tim của mô hình ngắt kết nối trong ADO.NET. DataSet được mô tả như một "cơ sở dữ liệu trong bộ nhớ" (in-memory database), là một bản sao hoàn chỉnh của một phần dữ liệu từ nguồn. Nó hoàn toàn độc lập với nguồn dữ liệu gốc, nghĩa là sau khi dữ liệu được tải vào DataSet, kết nối đến CSDL có thể được đóng lại. DataSet không chỉ chứa dữ liệu mà còn chứa cả cấu trúc (schema) của dữ liệu đó. Nó có thể chứa nhiều bảng (DataTable), các mối quan hệ (DataRelation) giữa các bảng, và các ràng buộc (Constraint), mô phỏng một cách chân thực một CSDL quan hệ thu nhỏ. Sự linh hoạt này cho phép các nhà phát triển thực hiện các thao tác phức tạp như sắp xếp, tìm kiếm, lọc dữ liệu trực tiếp trên bộ nhớ mà không cần tương tác liên tục với máy chủ. Để đưa dữ liệu vào và ra khỏi DataSet, ADO.NET cung cấp một thành phần quan trọng là DataAdapter. Nó hoạt động như một người trung gian, sử dụng các đối tượng Command (SelectCommand, InsertCommand, UpdateCommand, DeleteCommand) để đọc dữ liệu từ CSDL và điền vào DataSet (thông qua phương thức Fill), cũng như cập nhật các thay đổi từ DataSet trở lại CSDL (thông qua phương thức Update).

4.1. Cấu trúc DataSet DataTable DataRow và DataColumn

DataSet được tổ chức theo một cấu trúc phân cấp chặt chẽ. Thành phần chính trong một DataSet là một tập hợp các đối tượng DataTable, mỗi DataTable đại diện cho một bảng dữ liệu. Mỗi DataTable lại bao gồm một tập hợp các DataColumn định nghĩa các cột (tên cột, kiểu dữ liệu) và một tập hợp các DataRow chứa dữ liệu thực tế cho các hàng. Cấu trúc này cho phép truy cập dữ liệu một cách linh hoạt và trực quan. Ví dụ, có thể truy cập một bảng cụ thể trong DataSet bằng tên của nó, sau đó lặp qua từng DataRow trong bảng đó để đọc hoặc sửa đổi dữ liệu. Mỗi DataRow còn có một thuộc tính RowState để theo dõi trạng thái của nó (ví dụ: Added, Modified, Deleted), giúp DataAdapter biết chính xác lệnh SQL nào cần thực thi khi cập nhật lại CSDL.

4.2. DataAdapter Cầu nối giữa DataSet và nguồn dữ liệu

DataAdapter là thành phần không thể thiếu khi làm việc với DataSet trong ADO.NET. Nó đóng vai trò là một cây cầu hai chiều. Ở chiều đi, nó sử dụng SelectCommand để thực thi một câu lệnh truy vấn, lấy dữ liệu từ nguồn và sử dụng phương thức Fill để đổ dữ liệu đó vào một DataTable trong DataSet. Ở chiều về, khi dữ liệu trong DataSet đã được thay đổi, phương thức Update của DataAdapter sẽ được gọi. Nó sẽ tự động duyệt qua các DataRow đã thay đổi, kiểm tra RowState của chúng và thực thi các lệnh InsertCommand, UpdateCommand, hoặc DeleteCommand tương ứng để đồng bộ hóa các thay đổi đó với CSDL gốc. Đối tượng SqlCommandBuilder có thể được sử dụng để tự động tạo ra các lệnh cập nhật này, giúp đơn giản hóa đáng kể quá trình lập trình.

4.3. So sánh DataSet và DataReader Khi nào nên dùng gì

Cả DataSetDataReader đều dùng để truy xuất dữ liệu, nhưng chúng phục vụ cho các mục đích rất khác nhau. DataReader cung cấp truy cập dữ liệu nhanh, chỉ đọc, chỉ tiến, và rất tiết kiệm bộ nhớ, lý tưởng cho việc đọc và hiển thị dữ liệu một cách nhanh chóng. Ngược lại, DataSet cung cấp một mô hình dữ liệu phong phú hơn trong bộ nhớ, cho phép đọc/ghi, truy cập ngẫu nhiên, và làm việc với nhiều bảng cùng lúc trong chế độ ngắt kết nối. DataSet tiêu tốn nhiều bộ nhớ hơn nhưng lại cực kỳ linh hoạt cho các tác vụ xử lý, sắp xếp, lọc dữ liệu phức tạp hoặc khi cần truyền dữ liệu giữa các tầng của ứng dụng. Lựa chọn giữa DataSetDataReader phụ thuộc vào yêu cầu cụ thể của từng tác vụ: nếu chỉ cần đọc dữ liệu tuần tự, hãy dùng DataReader; nếu cần một bản sao dữ liệu linh hoạt để thao tác trong bộ nhớ, hãy dùng DataSet.

V. Ứng dụng ADO

Để đơn giản hóa và tăng tốc quá trình phát triển ứng dụng truy cập dữ liệu, môi trường phát triển tích hợp (IDE) Visual Studio của Microsoft cung cấp một công cụ trực quan mạnh mẽ là Data Source Configuration Wizard. Công cụ này cho phép các nhà phát triển nhanh chóng thiết lập kết nối đến các nguồn dữ liệu, chọn các bảng và cột cần thiết, và tự động tạo ra các thành phần ADO.NET như DataSetDataAdapter mà không cần viết nhiều mã lệnh. Việc này không chỉ giúp giảm thiểu thời gian phát triển mà còn hạn chế các lỗi cú pháp thường gặp khi viết mã thủ công. Bằng cách sử dụng giao diện kéo-thả, nhà phát triển có thể liên kết các điều khiển trên giao diện người dùng (UI controls) như DataGridView, TextBox, ComboBox trực tiếp với các nguồn dữ liệu đã được cấu hình. Visual Studio sẽ tự động tạo ra mã nền cần thiết để xử lý việc tải, hiển thị, và cập nhật dữ liệu. Điều này cho phép tạo ra các ứng dụng CRUD (Create, Read, Update, Delete) hoàn chỉnh một cách nhanh chóng. Mặc dù wizard rất tiện lợi cho các tác vụ phổ biến, việc hiểu rõ các đối tượng ADO.NET cơ bản như Connection, Command, và DataSet vẫn rất quan trọng để có thể tùy chỉnh và tối ưu hóa ứng dụng cho các kịch bản phức tạp hơn.

5.1. Hướng dẫn thiết lập Data Source nhanh cho project

Quá trình thiết lập một nguồn dữ liệu mới bằng wizard khá đơn giản. Từ menu 'Data' trong Visual Studio, chọn 'Add New Data Source...'. Wizard sẽ hướng dẫn qua từng bước. Đầu tiên là chọn loại nguồn dữ liệu (thường là Database). Tiếp theo, tạo một kết nối mới (New Connection) bằng cách cung cấp thông tin về máy chủ, phương thức xác thực, và tên cơ sở dữ liệu. Sau khi kết nối thành công, wizard sẽ cho phép chọn các đối tượng CSDL cần sử dụng, như các bảng (tables) và khung nhìn (views). Cuối cùng, một DataSet định kiểu (typed DataSet) sẽ được tạo ra trong project, chứa cấu trúc của các bảng đã chọn. Chuỗi kết nối cũng sẽ được tự động lưu vào tệp cấu hình của ứng dụng để dễ dàng quản lý và thay đổi sau này.

5.2. Cách xây dựng Form hiển thị và thao tác dữ liệu

Sau khi Data Source được cấu hình, cửa sổ 'Data Sources' trong Visual Studio sẽ hiển thị các bảng dữ liệu có sẵn. Từ đây, có thể kéo thả trực tiếp các bảng hoặc các cột riêng lẻ vào Form thiết kế. Visual Studio sẽ tự động tạo ra các điều khiển giao diện phù hợp. Ví dụ, kéo một bảng vào Form sẽ tạo ra một DataGridView để hiển thị dữ liệu dạng lưới và một BindingNavigator để điều hướng, thêm, xóa, lưu bản ghi. Kéo một cột vào Form sẽ tạo ra một Label và một TextBox. Tất cả các điều khiển này đã được tự động liên kết (data binding) với DataSet tương ứng. Nhờ vậy, việc tạo một giao diện hoàn chỉnh để người dùng có thể xem và thao tác trực tiếp với dữ liệu trở nên cực kỳ nhanh chóng và trực quan, giảm thiểu đáng kể khối lượng công việc lập trình.

18/07/2025

Trích đoạn nội dung tài liệu

Tổng Quan về ADO.NET 1 Nội Dung  ADO.NET  Quá trình phát triển  Đặc điểm ADO.NET Data Provider  DataSet  Data Source Configuration Wizard 2 Giới thiệu ADO.NET  ActiveX Data Object .NET)  Công nghệ của MS trên .NET Framework  Phát triển từ nền tảng ADO  Cung cấp các lớp đối tượng và hàm thư viện phục vụ cho việc kết nối và xử lý dữ liệu ADO.NET Application 3 Giới thiệu ADO.NET  Mô hình .NET Framework Microsoft .NET Framework Web Services User Interface Data and XML ADO. Base Classes Common Language Runtime 4 Nội Dung  ADO.NET  Quá trình phát triển  Đặc điểm ADO.NET Data Provider  DataSet  Data Source Configuration Wizard 5 Quá trình phát triển  Native API DB API Application Database  ODBC DB API ODBC API Driver ODBC Driver Driver Application Database 6 Quá trình phát triển  ADO, OLE DB Provider Provider Non-Relational Data ADO Provider OLE DB Provider Application Driver ODBC Driver Driver Relational Data OLE: Object Linking and Embedding 7 Quá trình phát triển ADO.NET 8 Nội Dung  ADO.NET  Quá trình phát triển  Đặc điểm ADO.NET Data Provider  DataSet  Data Source Configuration Wizard 9 ADO.NET là một phần của .NET Framework  Thư viện lớp có chức năng thao tác dữ liệu trong ngôn ngữ MS.NET là dạng “Disconnected” Disconnected  Cho phép lấy cả một cấu trúc phức tạp của DL từ CSDL, sau đó ngắt kết nối rồi mới thực hiện thao tác xử lý!  ADO luôn phải duy trì kết nối trong suốt quá trình làm việc. 10 tr ờng “connected” Môi trư  Mỗi user có một kết nối cố định tới data source  Ưu điểm  Môi trường được bảo vệ tốt  Kiểm soát được sự đồng bộ  Dữ liệu luôn được mới  Nhược  Phải có một kết nối mạng cố định  Scalability 11 tr ờng “disconnected” Môi trư  Một tập con của dữ liệu trung tâm được sao chép và bổ sung độc lập, sau đó sẽ được merge lại vào dữ liệu trung tâm.  Ưu điểm  Có thể làm việc bất cứ lúc nào, cũng như có thể kết nối bất kỳ vào Data Source  Cho phép user khác có thể kết nối  Nâng cao hiệu suất thực hiện của ứng dụng  Khuyết  Dữ liệu không được cập nhật một cách nhanh nhất  Sự tranh chấp có thể xuất hiện và phải giải quyết 12 ADO.NET mạnh mẽ  Kế thừa các ưu điểm của ADO  Kết hợp với ý tưởng thiết kế hoàn toàn mới  Đặc điểm nổi bật  Thiết kế hoàn toàn dựa vào XML  Chuẩn giao tiếp dữ liệu phổ biến nhất trên môi trường Internet hiện nay  Thiết kế hoàn toàn hướng đối tượng  Đặc trưng của thư viện .NET Framework 13 ADO.

ADO Đặc Điểm ADO ADO.NET Data xử lý được Recordset : tương đương 1 bảng Dataset : tương đương 1 database đưa vào bộ nhớ dữ liệu trong database dưới dạng Duyệt dữ liệu Recordset chỉ cho phép duyệt tuần Dataset : duyệt “tự do, ngẫu tự, từng dòng một. nhiên”, truy cập thẳng tới bảng, dòng, cột mong muốn. Dữ liệu ngắt kết Recordset thiên về hướng kết nối, Dataset hỗ trợ hoàn toàn ngắt kết nối nên việc hỗ trợ ngắt kết nối không nối mạnh Trao đổi dữ liệu Khả năng trao đổi dữ liệu ADO ADO.NET trao đổi dữ liệu qua qua Internet qua Internet thường có nhiều hạn Internet rất dễ dàng vì ADO. Do dùng chuẩn COM được thiết kế theo chuẩn XML, là chuẩn dữ liệu chính được sử dụng để trao đổi trên Internet.NET  Kiến trúc của ADO.NET gồm 2 phần chính  Phần kết nối: sử dụng khi kết nối CSDL và thao tác dữ liệu, phải thực hiện kết nối khi thao tác  Connection: Connection quản lý việc đóng mở DB  ???Connection: SqlConnection, OleDbConnection  Command: Command lệnh truy vấn, tương tác dữ liệu khi đang lập kết nối  ???Command: SqlCommand, OleDbCommand  DataReader: DataReader đọc dữ liệu, chỉ xử lý 1 dòng dữ liệu tại một thời điểm  ???DataReader: SqlDataReader, OleDbDataReader  DataAdapter: DataAdapter cầu nối giữa DB và DataSet 15 ADO.NET  Phần ngắt kết nối: là DataSet  DataSet không quan tâm đến DB thuộc kiểu gì, và lấy dữ liệu từ DataAdapter để xử lý  DataSet xem như một DB trong bộ nhớ: bảng, quan hệ…  DataSet có các thành phần con như  DataTable  DataRow  DataColumn  DataRelation  Các đối tượng nhóm: DataTableCollection, DataRowCollection, DataColumnCollection 16 Mô hình đối tư t ợng ADO.NET 17 Các lớp thư th viện ADO.OleDb: Access, SQL Server, Oracle  System.SqlClient: SQL Server  System.OracleClient: Oracle  Đặc điểm:  Cả ba thư viện trên về giao tiếp lập trình là giống nhau  Dùng thư viện SqlClient truy xuất SQL Server nhanh hơn OleDb  Tương tự cho OracleClient 18 Nội Dung  ADO.NET  Quá trình phát triển  Đặc điểm ADO.NET Data Provider  DataSet  Data Source Configuration Wizard 19 NET Data Provider  Mô hình .NET Data Provider 20 NET Data Provider - Connection Connection Application Database Thuộc tính & Phương thức • ConnectionString: chuỗi kết nối DataSource • Open(): thiết lập kết nối đến DS • Close(): đóng kết nối với DS 21 NET Data Provider - Connection  Mô tả CSDL sử dụng minh họa Đặc điểm Thông tin DBMS MS SQL Server Express 2005 DB 1 CSDL StudentDB DB 2 CSDL Northwind 22 NET Data Provider - Connection SQL Connection SqlConnection cnn = new SqlConnection(); cnn.\\SQLEXPRESS; database=Northwind; Trusted_Connection=true”; cnn.Open(); //xử lý trong quá trình kết nối Thay bằng “localhost” … trong SQL Server 2005 cnn.Close(); 23 NET Data Provider - Connection Database ODBC/OLE DB Connection (*) MS Access Driver = {Microsoft Access Driver (*.mdb)}; DBQ = <đường dẫn file access> Provider=Microsoft.0; Data Source = <đường dẫn file access> Driver = {SQLServer}; Server = ServerName; SQL Server Database= DatabaseName; Uid=Username; Pwd=Password; Provider= SQLOLEDB; Data Source=ServerName; Initial Catalog=DatabaseName; UserId=Username; Password=Password (*): Xem thêm chuỗi kết nối trong: http://www.com/?carrier=sqlserver2005 24 NET Data Provider - Connection OLEDB Connection OleDbConnection cnn = new OleDbSqlConnection(); cnn.ConnectionString = “Provider=Microsoft.0; Data Source =Sinhvien.Open(); //xử lý trong quá trình kết nối … cnn.\\SQLEXPRESS; database=Northwind; Trusted_connection=true”; SqlCommand cmd = new SqlCommand(“”,cnn); cmd.CommandText = “Select COUNT(*) From Customers”; cnn.ConnectionString = "Data source=.\\SQLEXPRESS;"+ "Initial Catalog=StudentDB; StudentDB Integrated security=yes;"; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "Insert into Sinhvien values(007,'Le Nam','1/1/1980',1,null,null)"; cmd.Connection = conn; conn.Close(); 28 NET Data Provider - Command  Tham số hóa câu lệnh  Một câu lệnh được sử dụng nhiều lần! SQL Command - Param … cmd.CommandText = "Insert into Sinhvien Câu lệnh values(@MS,@HT,@NS,@GT,@DC,@DT)"; values(@MS,@HT,@NS,@GT,@DC,@DT) được tham cmd.Add("@MS", @MS SqlDbType.Int); số hóa cmd.Add("@HT", @HT SqlDbType.Add("@NS",SqlDbType.DateTime); @NS cmd.Add("@GT",SqlDbType.Bit); Khai báo @GT cmd.Add("@DC",SqlDbType.NVarChar); @DC tham số cmd.Add("@DT",SqlDbType.Int); @DT Tên field Kiểu dữ liệu 29 NET Data Provider - Command SQL Command - Param … cmd.Value @MS = 999; Truyền giá cmd.Value @HT = "Nguyen Ha Giang"; trị cho các cmd.Value @NS = new DateTime(1978,12,4); tham số cmd.Value @GT = 1; tương cmd.Value @DC = “Tan Binh"; cmd.Value = 5120791; ứng @DT conn.Close(); 30 NET Data Provider - DataReader Connection DataReader Command Application Database Thuộc tính & Phương thức • HasRow: cho biết câu truy vấn có trả về dữ liệu Truy xuất tuần tự • Read(): đọc một mẫu tin Chỉ đọc dữ liệu • [i]: truy xuất đến cột i của mẫu tin được đọc • Close(): đóng Cơ chế kết nối 31 NET Data Provider - DataReader DataReader … SqlCommand cmd = new SqlCommand("Select * From Sinhvien", Sinhvien conn); SqlDataReader reader; reader Thực thi lệnh truy vấn conn.Open(); reader = cmd.ExecuteReader(); ExecuteReader Đọc một dòng while (reader.Read()) reader listBox1.Add(reader["Hoten"]); reader reader.Close(); reader Lấy cột Hoten của conn.Close(); dòng vừa đọc 32 NET Data Provider - DataAdapter DataSet DataAdapter Data Source DataTable SelectCommand SelectCommand Fill Fill Update Update UpdateCommand UpdateCommand DataAdapter DataTable SelectCommand SelectCommand Fill Fill Update Update UpdateCommand UpdateCommand 33 NET Data Provider - DataAdapter Thuộc tính & Phương thức • Fill(DataSet): Fill sử dụng SelectCommand lấy dữ liệu từ Data Source đổ vào Data Set • Update(DataSet): Update InsertCommand, UpdateCommand, DeleteCommand cập nhật dữ liệu trong DataSet vào DataSource Update Update DataBase DataAdapter DataSet Fill Fill 34 NET Data Provider - DataAdapter DataAdapter string strConn="Server=.\\SQLEXPRESS; Database=StudentDB; Trusted_connection=true"; SqlDataAdapter adapter = new SqlDataAdapter("Select * From Sinhvien", strConn); DataSet ds = new DataSet(); adapter.Fill(ds); // thao tác trên dataset … adapter.Update(ds); 35 Nội Dung  ADO.NET  Quá trình phát triển  Đặc điểm ADO.NET Data Provider  DataSet  Data Source Configuration Wizard 36 DataSet  Là phần cơ sở dữ liệu được lưu trữ trong bộ nhớ (in-memory database)  Cơ chế không kết nối  Nhờ đối tượng DataAdapter làm trung gian  Hỗ trợ đầy đủ đặc tính XML  Thao tác được với tất cả mô hình lưu trữ hiện tại:  Flat file database: plain text, mixed text, binary text  Relational database.

 Hierarchical: data is organized into a tree-like structure 37 DataSet vs. DataReader DataSet DataReader Read/write access to data Read-only Includes multiple tables from Based on one SQL statement different databases from one database Disconnected Connected Bind to multiple controls Bind to one control only Forward and backward Forward-only scanning of data Slower access Faster access Supported by Visual Studio Manually coded .NET tools 38 DataSet  Các thành phần  Tables DataSet Tables  Relations DataTable DataRow(s) Relations DataColumn DataRelation Constraint(s) DataRelation DataTable DataTable 39 DataSet DataSet .] DataTable DataTable schema .] DataRow data DataRow. 40 DataSet - DataTable  DataTable: thể hiện một bảng trong CSDL Thuộc tính & Phương thức • TableName: tên của bảng dữ liệu • Columns: Columns danh sách các cột • Rows: Rows danh sách các mẫu tin • PrimaryKey: danh sách các cột là khóa chính • NewRow(): NewRow tạo một mẫu tin mới 41 DataSet - DataColumn  DataColumn: đại diện cho một cột trong bảng  ColumnName: tên cột  DataType: kiểu dữ liệu DataTable Column1 Column2 … Column n 42 DataSet - DataRow  DataRow: đại diện cho mẫu tin trong bảng  RowState: trạng thái Added, Modified, Deleted,…  [i]: truy xuất đến cột i  Delete(): đánh dấu xóa mẫu tin DataTable Column1 Column2 … Column n abc xyz omt Row … … … … … … 43 DataSet DataSet – Update Row string strConn = "data source=.\\SQLEXPRESS; Initial Catalog=StudentDB; integrated security=yes;"; string strCmd = "Select * From Sinhvien"; SqlDataAdapter da = new SqlDataAdapter(strCmd, strConn); SqlCommandBuilder builder = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow dr in ds.Rows) VD: Cập nhật tất cả các dr["Ngaysinh"] = DateTime.Now; cột với ngày giờ hiện hành da.Fill(ds); Lấy các dòng có ngày sinh trước DataTable table = ds.Tables[0]; 1/1/1980 DataRow[] rows = table.Select("Ngaysinh<'1/1/1980'"); foreach (DataRow r in rows) Đánh dấu xóa r.Delete(); các dòng này da.Update(ds); 45 Nội Dung  ADO.NET  Quá trình phát triển  Đặc điểm ADO.NET Data Provider  DataSet  Data Source Configuration Wizard 46 Data Source Configuration Wizard  Trong VS.NET 2005 có chức năng Data Source Configuration Wizard  Nhanh chóng thiết lập Data Source cho project  Xây dựng form hiển thị và thao tác dữ liệu  Thông qua thao tác kéo thả từ Data Source 47 Data Source Configuration Wizard  Tạo một ứng dụng Windows Application  Trong menu Data | Add New Data Source… 48 Data Source Configuration Wizard  Tạo New Connection 49 Data Source Configuration Wizard  Hoàn tất khai báo Data Source Chuỗi kết nối 50

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ