ADO.NET được thiết kế với các tính năng: kiến trúc dữ liệu không kết nối disconnected data architecture, tích hợp với XML, và được tối ưu để kết nối với cơ sở dữ liệu và các nguồn dữ liệ
Giới thiệu về ADO.NET(Active X DataObject NET)
Khái niệm
ADO.NET là bộ thư viện hướng đối tượng (OOP) giúp kết nối và xử lý dữ liệu từ các nguồn như cơ sở dữ liệu Với ADO.NET, lập trình viên dễ dàng thực hiện các thao tác truy vấn, cập nhật và quản lý dữ liệu một cách hiệu quả Đây là công cụ quan trọng để phát triển các ứng dụng Windows và Web cần tương tác với dữ liệu nguồn.
SQL Server, Oracle, MySQL, nhưng nó cũng có thể là file text, exel hoặc XML
ADO.NET là một tập hợp các lớp mạnh mẽ, giúp kết nối, truy xuất, chèn, và xóa dữ liệu hiệu quả từ nguồn dữ liệu Thư viện này chủ yếu dựa trên hệ thống System.Data.dll, cung cấp các công cụ cần thiết để quản lý dữ liệu trong các ứng dụng NET Với khả năng xử lý linh hoạt và tối ưu, ADO.NET là lựa chọn hàng đầu cho các nhà phát triển muốn tương tác và thao tác dữ liệu một cách an toàn và hiệu quả.
Đặc điểm
– 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
ADO.NET là dạng "Disconnected" cho phép lấy toàn bộ cấu trúc dữ liệu phức tạp từ cơ sở dữ liệu rồi ngắt kết nối để thực hiện các thao tác xử lý dữ liệu sau đó Điều này giúp tối ưu hóa hiệu suất và giảm tải cho hệ thống, đồng thời đảm bảo khả năng xử lý dữ liệu linh hoạt hơn Thật sự, ADO.NET luôn duy trì kết nối liên tục trong suốt quá trình làm việc để đảm bảo tính nhất quán và chính xác của dữ liệu.
Môi trường “connected” : Mỗi user có một kết nối cố định tới data source là những đối tượng giao tiếp trực tiếp với CSDL
+ 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
+ Phải có một kết nối mạng cố định
Một tập con của dữ liệu trung tâm được sao chép và bổ sung độc lập, giúp người dùng có thể làm việc với dữ liệu offline (khi đã đóng kết nối cơ sở dữ liệu) Sau đó, các dữ liệu này sẽ được hợp nhất lại vào dữ liệu trung tâm nhằm đảm bảo tính đồng bộ và nhất quán Phương pháp này tối ưu cho phép quản lý dữ liệu linh hoạt và hiệu quả trong các hệ thống dữ liệu phân tán.
+ 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
+ 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
– 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
+ 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
+ Hướng đối tượng: Đặc trưng của thư viện NET Framework Đặc điểm ADO ADO.NET
Data xử lý được Recordset : tương đương 1 bảng dữ liệu trong database Dataset : tương đương 1 database đưa vào bộ nhớ dưới dạng
Duyệt dữ liệu Recordset chỉ cho phép duyệt tuần tự, từng dòng một
Dataset : duyệt “tự do, ngẫu 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 nối
Recordset thiên về hướng kết nối, nên việc hỗ trợ ngắt kết nối không mạnh
Dataset hỗ trợ hoàn toàn ngắt kết nối
Trao đổi dữ liệu qua Internet
Khả năng trao đổi dữ liệu ADO qua Internet thường có nhiều hạn chế Do dùng chuẩn COM
ADO.NET giúp trao đổi dữ liệu qua Internet dễ dàng nhờ vào việc được thiết kế theo chuẩn XML, đây là tiêu chuẩn dữ liệu chính được sử dụng để chia sẻ thông tin trên mạng.
Các thư viện truy xuất CSDL trong ADO.NET
Như bạn có thể biết rằng, có rất nhiều loại database hiện nay như Microsoft SQL
Server, Microsoft Access, Oracle, Borland Interbase, và IBM DB2,… và các thư viện truy xuất cụ thể
+ System.Data.OleDb: Access, SQL Server, Oracle
+ System.Data.SqlClient: SQL Server
+ Về mặt giao tiếp lập trình ứng dụng, cả 3 thư viện trên không khác biệt nhau nhiều
+ Dùng thư viện System.Data.SqlClient sẽ truy xuất SQL Server nhanh hơn
+ Dùng thư viện System.Data.OracleClient sẽ truy xuất Oracle nhanh hơn
Những loại ứng dụng nào sử dụng ADO.NET
ADO.NET là công nghệ phù hợp để phát triển mọi loại ứng dụng NET, giúp dễ dàng truy cập và quản lý dữ liệu từ nhiều nguồn khác nhau Bạn có thể sử dụng ADO.NET để xây dựng các ứng dụng doanh nghiệp, hệ thống quản lý dữ liệu, ứng dụng web hoặc desktop, đều có thể tận dụng khả năng truy cập dữ liệu hiệu quả của công nghệ này Nhờ vào khả năng kết nối, truy vấn và xử lý dữ liệu linh hoạt, ADO.NET trở thành lựa chọn hàng đầu cho các nhà phát triển ứng dụng NET muốn tích hợp dữ liệu từ nhiều nguồn khác nhau một cách dễ dàng và nhanh chóng.
ASP.NET Web Form Applications
ASP.NET Web API Applications
Kiến trúc ADO.NET
Data Provider
Các nhà cung cấp dữ liệu của NET Framework cung cấp các đối tượng hỗ trợ cho việc kết nối đến các cơ sở dữ liệu, giúp ứng dụng truy cập và thao tác dữ liệu một cách dễ dàng Tuy nhiên, các cơ sở dữ liệu này không thể thực thi trực tiếp mã C# mà chỉ hiểu câu lệnh SQL Do đó, khi phát triển ứng dụng NET cần sử dụng các lệnh SQL để truy xuất dữ liệu hoặc thực hiện các thao tác chèn, cập nhật, xóa dữ liệu từ ứng dụng vào cơ sở dữ liệu một cách hiệu quả.
Chuẩn bị câu lệnh SQL
Lấy kết quả và hiển thị chúng trong ứng dụng
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: quản lý việc đóng mở DataBase
+ ConnectionString: loại Data Source cần kết nối
+ Open(): thiết lập kết nối đến Data Source
+ Close(): ngắt kết nối đến Data Source
– Sau đây là một số phương thức quan trọng của SqlConnection:
+ BeginTransaction: Nó được sử dụng để bắt đầu một transaction với cơ sở dữ liệu và trả về một đối tượng đại diện cho transaction mới
+ ChangeDatabase(string database): Nó được sử dụng để thay đổi cơ sở dữ liệu hiện tại cho một SqlConnection đang mở
+ ChangePassword(string connectionString, string newPassword): Thay đổi mật khẩu SQL Server cho người dùng được chỉ định trong chuỗi kết nối thành mật khẩu mới được cung cấp
Phương pháp Close() dùng để đóng kết nối với cơ sở dữ liệu một cách tối ưu nhất, giúp quản lý tài nguyên hiệu quả và đảm bảo hệ thống hoạt động ổn định Việc đóng kết nối đúng cách sau khi hoàn thành thao tác với dữ liệu là rất quan trọng để tránh rò rỉ tài nguyên và giữ cho ứng dụng hoạt động trơn tru Sử dụng Close() giúp giải phóng kết nối đang mở, tối ưu hóa hiệu suất và duy trì sự an toàn của hệ thống cơ sở dữ liệu.
+ CreateCommand(): Nó tạo và trả về một đối tượng
System.Data.SqlClient.SqlCommand được liên kết với
+ GetSchema(): Nó trả về thong tin lược đồ cho nguồn dữ liệu của
+ Open(): Phương thức này được sử dụng để mở một kết nối cơ sở dữ liệu với cài đặt thuộc tính được chỉ định bởi
System.Data.SqlClient.SqlConnection.ConnectionString
SqlConnection cnn = new SqlConnection(); cnn.ConnectionString = “server= \\SQLEXPRESS; databaseaBase; Trusted_Connection=true”; cnn.Open();
//xử lý trong quá trình kết nối
Servername là tên của server hoặc địa chỉ IP của máy mà bạn muốn kết nối đến, đảm bảo bạn nhập đúng để thiết lập kết nối ổn định Nếu server đó chính là máy của bạn, bạn có thể thay thế bằng "server=." để đơn giản hóa cấu hình Việc sử dụng đúng servername giúp xác định chính xác nguồn dữ liệu và tối ưu hóa quá trình truy cập.
+ databasename: Là tên của database mà bạn chọn để kết nối trong server đã khai báo trước đó
+ integrated security = true: Ở đây sử dụng quyền truy cập của window để truy cập vào SQL Server
OleDbConnection cnn = new OleDbSqlConnection(); cnn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0; Data Source =Sinhvien.mdb”; cnn.Open();
//xử lý trong quá trình kết nối … cnn.Close();
Command: lệnh truy vấn, tương tác dữ liệu khi đang lập kết nối
The ADO.NET SqlCommand class in C# is used to execute SQL statements and manage data operations with SQL Server databases It inherits from the DbCommand class and implements the ICloneable interface, providing robust functionality for executing queries and commands efficiently.
– SqlCommand trong C# cung cấp các Thuộc tính sau:
+ Connection: kết nối để thực hiện lệnh
+ CommandText: câu lệnh cần thực hiện
+ CommandType: loại câu lệnh (Text,TableDirect, StoredProc)
+ tác động (Insert, Update, Delete…)
– SqlCommand trong C# cung cấp các phương thức sau
+ BeginExecuteNonQuery(): Phương thức này bắt đầu thực thi không đồng bộ câu lệnh Transact-SQL hoặc thủ tục được lưu trữ mô tả bởi
System.Data.SqlClient.SqlCommand này
+ Cancel(): Phương thức này được dùng để hủy bỏ việc thực thi
+ Clone(): Phương thức này tạo một đối tượng
System.Data.SqlClient.SqlCommand mới, là bản sao của bản hiện tại
+ CreateParameter(): Phương thức này tạo mới một đối tượng
+ ExecuteReader(): Phương thức này gửi
System.Data.SqlClient.SqlCommand.CommandText tới
System.Data.SqlClient.SqlCommand.Connection và xây dựng một
+ ExecuteScalar(): Phương thức này thực hiện truy vấn và trả về cột đầu tiên của hàng đầu tiên trong tập kết quả đưuọc trả về bởi truy vấn
+ ExecuteNonQuery(): Phương thức này thực thi một câu lệnh Transact-SQL và trả về số hàng bị ảnh hưởng
+ Prepare(): Phương thức này tạo một phiên bản chuẩn bị của lệnh trên một phiên bản của SQL Server
+ ResetCommandTimeOut(): Phương thức này đặt lại thuộc tính
CommandTimeOut về giá trị mặc định của nó
SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data source=.\\SQLEXPRESS;"+
"Initial Catalog=StudentDB; Integrated security=yes;
SqlCommand cmd = new SqlCommand(); cmd.CommandText = // các lệnh xử lý cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); conn.Close();
Parameterizing SQL statements enhances security and efficiency when executing repeated commands Using placeholders like "@MS", "@HT", "@NS", "@GT", "@DC", and "@DT" allows dynamic assignment of values before execution Properly defining each parameter with its data type, such as SqlDbType.Int or SqlDbType.NVarChar, ensures data integrity Assigning specific values to parameters, like student ID, name, birthdate, gender, address, and tuition fee, prepares the command for safe insertion Opening and closing the database connection around the execution guarantees proper resource management Utilizing parameterized queries helps prevent SQL injection attacks and improves query performance in database operations.
DataReader: đọc dữ liệu, chỉ xử lý 1 dòng dữ liệu tại một thời điểm
SqlDataReader trong C# được sử dụng để đọc dữ liệu từ cơ sở dữ liệu SQL Server một cách hiệu quả, qua một luồng dữ liệu theo chiều tiến Nó hoạt động theo kiểu forward-only, nghĩa là chỉ đọc dữ liệu theo thứ tự và không thể quay lại bản ghi trước đó SqlDataReader yêu cầu kết nối đến nguồn dữ liệu phải mở và còn hoạt động trong quá trình đọc, đảm bảo hiệu suất truy xuất cao Ngoài ra, SqlDataReader ở chế độ chỉ đọc, không cho phép chỉnh sửa dữ liệu trực tiếp thông qua nó, do đó cần mở và đóng kết nối rõ ràng để đảm bảo an toàn và hiệu quả khi làm việc với dữ liệu.
– SqlDataReader cung cấp các thuộc tính sau
+ Connection: Nhận System.Data.SqlClient.SqlConnection được liên kết với
+ Depth: Nhận một giá trị cho biết depth (độ sâu) của hàng hiện tại
+ FieldCount: Lấy số cột trong hàng hiện tại
+ HasRows: Nhận một giá trị cho biết liệu
System.Data.SqlClient.SqlDataReader có chứa một hay nhiều hay không + IsClosed: Truy xuất một giá trị Boolean cho biết liệu phiên bản
The System.Data.SqlClient.SqlDataReader indicates whether it has been closed Additionally, the RecordsAffected property provides the number of rows affected by the execution of T-SQL statements, such as inserts, updates, or deletes.
+ VisibleFieldCount: Lấy số lượng trường trong
System.Data.SqlClient.SqlDataReader không bị ẩn
+ Item[String]:Nhận giá trị của cột được chỉ định ở định dạng gốc của nó với tên cột
+ Item[Int32]: Nhận giá trị của cột được chỉ định ở định dạng gốc của nó theo thứ tự cột
– SqlDataReader cung cấp các phương thức sau:
+ Close(): Được sử dụng để đóng đối tượng SqlDataReader
+ GetBoolean (int i): Nhận giá trị của cột được chỉ định dưới dạng Boolean
+ GetByte(int i): Nhận giá trị của cột được chỉ định dưới dạng byte
+ GetChar(int i): Nhận giá trị của cột được chỉ định dưới dạng một ký tự duy nhất
+ GetDateTime(int i): Nhận giá trị của cột được chỉ định dưới dạng đối tượng
+ GetDecimal(int i): Nhận giá trị của cột được chỉ định dưới dạng đối tượng
+ GetDouble(int i): Nhận giá trị của cột được chỉ định dưới dạng số dấu phẩy động, có độ chính xác double
+ GetFloat(int i): Nhận giá trị của cột được chỉ định dưới dạng số dấu phẩy động có độ chính xác single
+ GetName(int i): Lấy tên của cột được chỉ định
+ GetSchemaTable(): Trả về một System.Data.Table mô tả metadate column của System.Data.SqlClient.SqlDataReader
+ GetValue(int i): Nhận giá trị của cột được chỉ định ở định dạng gốc của nó
+ NextResult(): Nâng cao trình đọc dữ liệu đến kết quả tiếp theo khi đọc kết quả của các câu lệnh T-SQL
+ Read(): Được sử dụng để đọc các bản ghi, trả về true nếu có nhiều hơn một hàng và ngược lại là false
SqlCommand cmd = new SqlCommand("Select *
SqlDataReader reader; conn.Open(); reader = cmd.ExecuteReader(); while (reader.Read()) listBox1.Items.Add(reader["Hoten"]); reader.Close(); conn.Close();
DataAdapter: cầu nối giữa DB và DataSet
SqlDataAdapter trong C# hoạt động như một cầu nối giữa DataSet và nguồn dữ liệu SQL Server để truy xuất và cập nhật dữ liệu Nó là một lớp đại diện cho tập hợp các câu lệnh SQL cùng với kết nối cơ sở dữ liệu, giúp dễ dàng điền dữ liệu vào DataSet và đồng bộ dữ liệu với nguồn dữ liệu gốc.
– SqlDataAdapter cung cấp các phương thức sau
+ CloneInternals(): Được sử dụng để tạo một bản sao của bản DataAdapter hiện tại
+ Dispose(Boolean): Được sửu dụng để giải phóng các tài nguyên không được quản lý được sử dụng bởi DataAdapter
+ Fill(Data Set): Được sử dụng để thêm các hàng trong DataSet sao cho khớp với các hàng trong nguồn dữ liệu
+ FillSchema(DataSet, SchemaType, String, IDataReader): Được sử dụng để thêm một DataTable vào DataSet được chỉ định
+ GetFillParameters(): Được sử dụng để lất các tham số do người dùng thiết lập khi thực thi câu lệnh SQL Select
+ ResetFillLoadOption(): Được sử dụng để đặt lại FillLoadOption về trạng thái mặc định của nó
+ ShouldSerializeFillLoadOption(): Xác định xem thuộc tính FillLoadOption có nên được duy trì hay không
+ ShouldSerializeTableMappings(): Xác định liệu một hoặc nhiều đối tượng
DataTableMapping có tồn tại hay không
+ Update(DataSet): Được sử dụng để gọi các câu lệnh Insert, Update hoặc Delete tương
Ví dụ: string strConn="Server=.\\SQLEXPRESS; Database=StudentDB; Trusted_connection=true";
SqlDataAdapter("Select * From Sinhvien", strConn);
DataSet ds = new DataSet(); adapter.Fill(ds);
DataSet
DataSet là một tập hợp con của cơ sở dữ liệu trong bộ nhớ, gồm nhiều bảng dữ liệu chứa dữ liệu quan hệ ở định dạng bảng Nó không phụ thuộc vào bất kỳ nhà cung cấp dữ liệu nào, giúp lưu trữ dữ liệu độc lập sau khi kết nối và truy xuất từ cơ sở dữ liệu thông qua ứng dụng NET DataSet có thể hoạt động độc lập và truy cập dữ liệu từ nhiều nguồn khác nhau, chứa một hoặc nhiều đối tượng DataTable để quản lý dữ liệu hiệu quả.
DataSet và các lớp liên quan như DataRow, DataTable, DataView được sử dụng để lưu trữ dữ liệu từ cơ sở dữ liệu sau khi thực thi các câu lệnh của NET Framework data providers Dữ liệu này thường được lưu trữ trong bộ nhớ RAM, tạo thành một phần của cơ sở dữ liệu in-memory, giúp truy xuất và xử lý dữ liệu nhanh chóng và hiệu quả.
DataSet có các thành phần con như: DataTable, DataRow, DataColumn,
Các đối tượng nhóm chính trong xử lý dữ liệu bao gồm DataTableCollection, DataRowCollection và DataColumnCollection, giúp quản lý và thao tác các bảng dữ liệu hiệu quả Cơ chế không kết nối (Disconnected Mode) trong ADO.NET hoạt động dựa trên đối tượng DataAdapter, đóng vai trò trung gian để xử lý dữ liệu mà không duy trì kết nối liên tục đến cơ sở dữ liệu DataAdapter còn hỗ trợ đầy đủ các tính năng của XML, giúp thao tác linh hoạt với các mô hình lưu trữ dữ liệu hiện tại, từ đó nâng cao hiệu suất và khả năng mở rộng của ứng dụng.
Flat file database: plain text, mixed text, binary text
Hierarchical: data is organized into a tree-like structure
DataTableCollection Tables Nhận tập hợp các bảng có trong
Nhận tập hợp các quan hệ liên kết các bảng và cho phép điều hướng từ bảng cha sang bảng con
DataColumnCollection Columns Nhận tập hợp các cột thuộc bảng này DataRowCollection Rows Nhận tập hợp các hàng thuộc bảng này
ConstraintCollection Constraints Nhận tập hợp các ràng buộc được duy trì bởi bảng này
– Các thuộc tính của DataSet trong ADO.NET
CaseSensitive trong System.Data.DataTable được sử dụng để xác định xem các so sánh chuỗi có phân biệt chữ hoa chữ thường hay không Khi đặt giá trị thành true, các so sánh chuỗi sẽ phân biệt chữ hoa và chữ thường; nếu là false, các so sánh sẽ không phân biệt Mặc định của thuộc tính này là false, giúp đảm bảo tính nhất quán trong xử lý dữ liệu chuỗi Điều này rất hữu ích trong việc tối ưu hóa truy vấn và xử lý dữ liệu phù hợp với yêu cầu về phân biệt chữ hoa chữ thường.
DefaultViewManager cho phép xem và tùy chỉnh dữ liệu trong System.Data.Set, hỗ trợ lọc, tìm kiếm và điều hướng dễ dàng Công cụ này sử dụng System.Data.DataViewManager để tạo ra các chế độ xem dữ liệu tùy chỉnh phù hợp với yêu cầu của người dùng Nhờ đó, người phát triển có thể dễ dàng quản lý và trình bày dữ liệu một cách linh hoạt và hiệu quả hơn.
+ DataSetName: Được sử dụng để lấy hoặc đặt trên của System.Data.DataSet hiện tại
EnforceConstraints là chức năng dùng để kiểm tra và thiết lập xem các quy tắc ràng buộc có được tuân thủ trong quá trình cập nhật dữ liệu hay không Chức năng này đảm bảo rằng mọi thao tác cập nhật đều tuân theo các quy định về dữ liệu, giúp duy trì tính toàn vẹn và nhất quán của hệ thống Việc sử dụng EnforceConstraints đúng cách là cần thiết để đảm bảo dữ liệu luôn đúng tiêu chuẩn và đáng tin cậy trong quá trình quản lý.
+ HasErrors: Được sử dụng để nhận một giá trị cho biết liệu có lỗi trong bất kì đối tượng DataTable nào trong DataSet này hay không
IsInitialized là thuộc tính dùng để kiểm tra xem DataSet đã được khởi tạo chưa Nếu thuộc tính trả về giá trị true, điều đó có nghĩa là DataSet đã sẵn sàng và hoạt động đúng chuẩn Ngược lại, nếu trả về false, chứng tỏ DataSet chưa được khởi tạo hoặc chưa sẵn sàng để sử dụng Điều này giúp đảm bảo rằng các thao tác trên DataSet sẽ không gặp lỗi do nó chưa được chuẩn bị đầy đủ.
+ Prefix: Được sử dụng để lấy hoặc đặt một tiền tố XML làm bí danh cho namespace System.Data.DataSet
+ Locale: Được sử dụng để lấy hoặc đặt thông tin ngôn ngữ cho việc so sánh các chuỗi trong bảng
+ Namespace: Được sử dụng để lấy hoặc đặt tên namespace của
+ Site: Được sử dụng dể lấy hoặc thiết lập một System.ComponentModel.ISite cho System.Data.DataSet
+ Relations: Được sử dụng để lấy tập hợp các quan hệ liên kết các bảng và cho phép điều hướng từ bảng mẹ sang bảng con
+ Tables: Được sử dụng để lấy tập hợp các bảng có trong System.Data.DataSet
– Các phương thức của DataSet trong ADO.NET
BeginInit() bắt đầu quá trình khởi tạo đối tượng System.Data.DataSet, thường được sử dụng trên các biểu mẫu hoặc bởi các thành phần khác Quá trình này diễn ra ngay khi chương trình bắt đầu chạy, đảm bảo dữ liệu đã sẵn sàng cho các thao tác xử lý sau này Đặc biệt, phương thức này giúp tối ưu hiệu suất và đảm bảo tính toàn vẹn của dữ liệu trong quá trình thiết lập hệ thống.
+ Clear(): Xóa DataSet của bất kỳ dữ liệu nào, bằng cách xóa tất cả các hàng trong tất cả các bảng
Phương thức Clone() trong DataSet cho phép sao chép toàn bộ cấu trúc của DataSet, bao gồm các Schema, quan hệ và ràng buộc của DataTable Tuy nhiên, Clone() không sao chép bất kỳ dữ liệu nào chứa trong DataSet, chỉ tạo ra một bản sao thuần túy về cấu trúc dữ liệu Đây là cách hữu hiệu để tạo một bản mẫu dữ liệu mà không cần sao chép dữ liệu thực tế, giúp tối ưu hóa hiệu suất và quản lý dữ liệu linh hoạt hơn trong lập trình.
+ Copy(): Sao chéo cả cấu trúc và dữ liệu của DataSet được chọn
+ CreateDataReader(): Trả về một DataTableReader với một tập kết quả cho mỗi DataTable, theo trình tự giống như các bảng xuất hiện trong
+ CreateDataReader(params DataTable[] dataTables): Trả về một
System.Data.DataTableReader với một tập kết quả cho mỗi
+ EndInit(): Nó kết thúc việc khởi tạo DataSet, được sử dụng trên một biễu mẫu hoặc được sử dụng bởi một component khác
+ GetXml(): Trả về biểu diễn XML của dữ liệu được lưu trữ trong DataSet
+ GetXmlSchema(): Trả về Schema XML cho biểu diễn XML của dữ liệu được lưu trữ trong DataSet
Nạp dữ liệu vào DataSet từ database:
Phương thức sau sẽ kết nối đến database SQL Server, sau đó nạp hai table User và Group vào DataSet private static DataSet LoadData()
This article outlines a process for retrieving data from a SQL Server database named "YinYangDB" using C# It demonstrates establishing a trusted connection to the database, executing SQL queries to select all records from the "Users" and "Groups" tables, and filling a DataSet with the retrieved data through a SqlDataAdapter After executing these operations, the connection is closed, and the populated DataSet containing both the "User" and "Group" data is returned for further processing.
Phương thức Fill(DataSet) của DataAdapter tự động sử dụng tên bảng trong CommandText để đặt tên cho DataTable, giúp dễ dàng quản lý dữ liệu Tuy nhiên, để đảm bảo tên bảng chính xác khi có sự chỉnh sửa, tôi thường sử dụng overload Fill(DataSet, string) để đặt lại tên cho các bảng theo ý muốn Việc này giúp kiểm soát tốt hơn về tên bảng trong DataSet, đặc biệt khi làm việc với nhiều bảng dữ liệu phức tạp.
Instead of using Fill() to populate a DataSet, you can utilize Fill(DataTable) to create a new DataTable, which can then be added to your DataSet For example, create a new DataTable with `var table = new DataTable("Group");`, fill it using `dataAdapter.Fill(table);`, and then add it to the DataSet with `dataSet.Tables.Add(table);` This approach provides more control and flexibility when managing data in your application.
Một số tên bảng có thể trùng với các từ khóa SQL như "User", gây nhầm lẫn khi query, mặc dù điều này ít khi xảy ra, nhưng bạn nên đề phòng bằng cách áp dụng quy tắc đặt tên như sử dụng tiền tố hoặc đặt tên theo danh từ số nhiều Ngoài cách nạp dữ liệu từ DataTable, bạn còn có thể tạo dữ liệu động cho DataTable thông qua các collection Columns và Rows, giúp linh hoạt trong quản lý dữ liệu.
Tạo dữ liệu động cho DataTable
Kiểu dữ liệu DataColumn cung cấp đầy đủ các thuộc tính cần thiết để xây dựng một mô hình dữ liệu hoàn chỉnh cho DataTable Bạn có thể dễ dàng tạo ra một cột làm ID với chỉ số tự động tăng bắt đầu từ 1, đảm bảo không cho phép giá trị null và duy nhất trong bảng Điều này giúp quản lý dữ liệu hiệu quả hơn và đảm bảo tính nhất quán của dữ liệu trong các ứng dụng phát triển phần mềm.
DataColumn col = new DataColumn("ID", typeof(int)); col.AllowDBNull = false; col.AutoIncrement = true; col.AutoIncrementSeed = 1; col.Unique = true;
Các DataColumn trong DataTable cần có ít nhất hai thông tin quan trọng: tên cột và kiểu dữ liệu Việc thêm các DataColumn vào một DataTable rỗng sau khi khởi tạo rất dễ dàng, giúp bạn xây dựng cấu trúc dữ liệu một cách hiệu quả và linh hoạt.
Ví dụ: Tạo một DataTable với tên Persons với ba column là ID, Name và Birthday cùng với kiểu dữ liệu tương ứng là int, string và DateTime:
DataTable table = new DataTable("Persons");
Kết nối ADO.NET với các cơ sở dữ liệu
ADO.NET kết nối với SQL Server Database
Trong phần này mình có một đoạn code mẫu để kết nối với cơ sở dữ liệu SQL Server và truy xuất dữ liệu như sau:
SqlConnection connection = new SqlConnection("data source=.; database=TestDB; integrated security=true");
SqlCommand command = new SqlCommand("Select * from
SqlDataReader myReader = command.ExecuteReader(); while(myReader.Read())
Console.WriteLine("\t{0}/t{1}", myReader.GetInt32(0), myReader.GetString(1));
*Lưu ý: Để sử dụng được các lớp này các bạn cần khai báo thư viện
System.Data.SqlClient Đây là một thư viện được sử dụng cho cơ sở dữ liệu SQL
ADO.NET kết nối với Oracle Database
Tương tự như phần trên, ở đây mình có một đoạn code được sử dụng để kết nối với cơ sở dữ liệu Oracle:
OracleConnection connection = new OracleConnection("data source=.;database=TestDB; integrated security=true");
OracleCommand command = new OracleCommand("Select * from Customers", connection); connection.Open();
OracleDataReader myReader = command.ExecuteReader(); while (myReader.Read())
Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
To connect with OLEDB data sources such as Excel and Access, you need to use classes like OleDbConnection, OleDbCommand, and OleDbDataReader Additionally, ensure you include the System.Data.OleDb library to access these classes effectively.
Thao tác SQL Server với C# [ADO.NET]
Truy xuất dữ liệu từ SQL Server bằng ADO.NET
Dưới đây là đoạn code mình đã viết dùng để truy xuất dữ liệu từ SQL Server bằng
ADO.NET static void Main(string[] args)
SqlConnection con = new SqlConnection(); con.ConnectionString =
ConfigurationManager.ConnectionStrings["conn"].ConnectionString; try
SqlCommand cm = new SqlCommand("Select * from student", con); con.Open();
SqlDataReader sdr = cm.ExecuteReader(); while (sdr.Read())
Console.WriteLine(sdr["id"] + " " + sdr["name"] + " " + sdr["email"]);
Console.WriteLine("Co loi xay ra !!!" + e);
Thêm dữ liệu vào SQL Server bằng ADO.NET
static void Main(string[] args)
SqlConnection con = new SqlConnection(); con.ConnectionString =
ConfigurationManager.ConnectionStrings["conn"].ConnectionString; try
SqlCommand cm = new SqlCommand("insert into student (id, name, email, join_date) values ('101', 'Freetuts.net',
'Freetuts@gmail.com', '7/27/2021')", con); con.Open(); cm.ExecuteNonQuery();
Console.WriteLine("Them moi du lieu thanh cong!");
Console.WriteLine("Co loi xay ra!" + e);
Xóa dữ liệu khỏi SQL Server bằng ADO.NET
static void Main(string[] args)
SqlConnection con = new SqlConnection(); con.ConnectionString =
ConfigurationManager.ConnectionStrings["conn"].ConnectionString; try
SqlCommand cm = new SqlCommand("delete from student where id = '101'", con); con.Open(); cm.ExecuteNonQuery();
Console.WriteLine("Xoa thanh cong du lieu !!!");
Console.WriteLine("Co loi xay ra !!!" + e);
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
– Tạo một ứng dụng Windows Application
Trong menu Data | Add New Data Source
Hoàn tất khai báo Data Source Lưu chuỗi kết nối trong file cấu hình
Chọn bảng dữ liệu Kéo thả binding control vào Form
Trong cửa sổ Data Source/Chọn bảng cần sử dụng/ Kích chọn vào dấu mũi tên xuống sau tên bảng
Thiết lập view là DataGridView hay Details
Kéo Table thả vào Form
Tự động tạo các binding control cho table
Bổ sung DataGridView cho Form
Thay đổi Table sang DataGrid Kéo Table trong Data Source thả vào Form
Tổng kết
ADO.NET là một kĩ thuật NET để thao tác với nguồn dữ liệu Bạn có một vài Data
Provider cho phép bạn kết nối và giao tiếp dễ dàng với các nguồn dữ liệu khác nhau dựa trên giao thức hoặc kiểu database mà chúng hỗ trợ, giúp quá trình tích hợp dữ liệu trở nên đơn giản và hiệu quả mà không cần quan tâm đến các chi tiết kỹ thuật phức tạp của từng nguồn dữ liệu.
Trong quá trình phát triển ứng dụng, Provider được sử dụng để thao tác với dữ liệu một cách hiệu quả thông qua các đối tượng tương tự nhau Đặc biệt, đối tượng SqlConnection cho phép quản lý kết nối đến nguồn dữ liệu một cách dễ dàng và an toàn, giúp tối ưu hóa hiệu suất truy xuất dữ liệu.
SqlCommand enables you to send commands to the database efficiently To quickly read data using a forward-only mechanism, use SqlDataReader If you need to work with disconnected data, employ a DataSet to perform read and write operations to the data source seamlessly.
Trong khuôn khổ kiến thức, kỹ năng và thời gian có hạn, bài tiểu luận của em vẫn còn những thiếu sót cần khắc phục Em rất mong thầy góp ý để giúp em hoàn thiện hơn đề tài này Em xin chân thành cảm ơn thầy đã dành thời gian và công sức hỗ trợ.