Hướng dẫn học ADO.NET

Mục đích của khóa học này cung cấp các khái niệm từ cơ bản đến nâng cao trong ADO.NET.


ADO.NET là mộ thành phần của .Net Framework được sử dụng để kết nối dữ liệu của ứng dụng. Các nguồn dữ liệu có thể là: SQL Server và XML. ADO.NET có các lớp dùng để kết nối dữ liệu: thêm, xóa, sửa...

Trong khóa học này gồm có các bài hướng dẫn : Cung cấp dữ liệu data, kết nối sql server , connection, command, datareader, dataset, dataadapter, datatables, ví dụ web form, ví dụ MVC.....

Yêu cầu để học ADO.NET bạn phải biết:

Trước khi học ADO.NET, bạn phải có kiến thức cơ bản về lập trình C#

 

Giới thiệu về ADO.NET 

ADO.NET là một bộ các thư viện hướng đối tượng (OOP) cho phép bạn tương tác với dữ liệu nguồn. Thông thường thì dữ liệu nguồn là một cơ sở dữ liệu (database), nhưng nó cũng có thể là file text, exel hoặc XML. Theo những mục tiêu của hướng dẫn này, chúng ta sẽ chỉ xem xét tới cách ADO.NET làm việc với database.

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,… Để làm rõ hơn phạm vi của loạt bài này, tất cả ví dụ sẽ sử dụng SQL Server.

Tất cả các lớp ADO.NET chứa trong thư viện  System.Data.dll, lớp XML chứa trong thư viện  System.Xml.dll.

ADO.NET có hai thành phần chính thường được sử dụng để truy cập dữ liệu là .NET Framework data provider và the DataSet.

 

.NET Framework Data Providers

Các thành phần này được thiết kế cho việc truy cập dữ liệu nhanh hơn. Nó cung cấp các đối tượng: Connection, Command, DataReader and DataAdapter t

 

Đối tượng DataSet

Dùng để truy cập các nguồn dữ liệu độc lập. DataSet chứa một hoặc nhiều đối tượng DataTable. Hình sau cho ta thấy mối quan hệ giữa .NET Framework và DataSet

 

ADO Net Introduction 1

 


Vậy khi nào sử dụng DataReader, khi nào sử dụng DataSet?

Thông thường, chúng ta sử dụng DataSet trong các trường hợp sau:

  • Lưu tạm dữ liệu trong ứng dụng.
  • Trao đổi dữ liệu động .
  • Cho phép xử lý dữ liệu không cần kết nối. 

 

ADO.NET Framework Data Providers

Chúng ta biết rằng ADO.NET cho phép tương tác với các loại dữ liệu và kiểu database. Mỗi loại dữ liệu cần một cách thức khác nhau để có thể truy xuất. Các loại dữ liệu cũ sử dụng giao thức ODBC, các loại dữ liệu mới hơn sử dụng giao thức OleDb. Vì vậy cần có một thư viện thống nhất để làm việc với chúng, đây chính là lý do mà ADO.NET được tạo ra.

ADO.NET cung cấp một cách thức chung để tương tác với nguồn dữ liệu, nhưng với mỗi loại dữ liệu bạn phải sử dụng một thư viện khác nhau. Các thư viện này được gọi là Data Provider và thường được đặt tên theo giao thức hoặc loại dữ liệu mà chúng cho phép bạn truy xuất. Bảng sau  liệt kê các data provider phổ biến.

.NET Framework data provider Mô tả
.NET Framework Data Provider for SQL Server Được sử dụng để kết nối CSDL  Microsoft SQL Server. Yêu cầu namespace System.Data.SqlClient .
.NET Framework Data Provider for OLE DB Được sử dụng để kết nối OLE DB. Yêu cầu namespace System.Data.OleDb namespace.
.NET Framework Data Provider for ODBC Được sử dụng để kết nối nguồn dữ liệu sử dụng ODBC. Yêu cầu namespace System.Data.Odbc.
.NET Framework Data Provider for Oracle Được sử dụng Oracle data sources. Yêu cầu namespace System.Data.OracleClient namespace.
EntityClient Provider Được sử dụng để truy cập các ứng dụng dạng Entity Data Model . Yêu cầu namespace System.Data.EntityClient.
.NET Framework Data Provider for SQL Server Compact 4.0. Được sử dụng để truy cập Microsoft SQL Server Compact 4.0. Yêu cầu namespace System.Data.SqlServerCe.

Các đối tượng trong .NET Framework Data Providers  

Đối tượng Mô tả
Connection Thường được sử dụng để kết nối với một CSDL cụ thể..
Command Thương được sử dụng để thực thi các câu truy vấn trong CSDL.
DataReader Thương được sử dụng để đọc dữ liệu trong CSDL.
DataAdapter It populates a DataSet and resolves updates with the data source. The base class for all DataAdapter objects is the DbDataAdapter class.

 NET Framework Data Provider for SQL Server

Data provider xử lý dữ liệu tốt hơn. Vì, nó kết nối trực tiếp đến SQL Server không cần lớp trung gian. Trong phiên bản trước, nó có thể kết nối với SQL Server thông qua ODBC.

Các lớp kết nối với CSDL SQL Server classes chứa trong namespace System.Data.SqlClient. Namespace này chứa trong ứng dụng chúng ta theo cú pháp:

using System.Data.SqlClient; 

Namespace chứa các lớp quan trọng.

Lớp Mô tả
SqlConnection Được sử dụng để kết nối CSDL SQL Server. Lớp này không thể kế thừa.
SqlCommand Được sử dụng để thực thi các câu truy vấn trong CSDL. Lớp này không thể kế thừa.
SqlDataAdapter Lớp này là lớp trung gian để đọc dữ liệu cho DataSet. Lớp này không thể kế thừa.
SqlDataReader

Đối tượng data reader cho phép bạn lấy được kết quả của một câu lệnh SELECT từ một đối tượng command.
Để tăng hiệu suất, dữ liệu trả về từ một data reader là một luồng dữ liệu fast forward-only. Lớp này không thể thừa kế

SqlException Lớp này được sử dụng để bắt lỗi. Lớp này không thể kế thừa.

.NET Framework Data Provider for Oracle

Thường được sử dụng kết nối với CSDL Oracle. Data Provider hỗ trợ phiên bản từ 8.1.7 trở lên. 
Các lớp Oracle Data Provider chứa trong namespace System.Data.OracleClient. Chúng ta phải sử dụng cả hai  System.Data.OracleClient và System.data  trong ứng để kết nối CSDL Oracle.

using System.Data;    
using System.Data.OracleClient; 

.NET Framework Data Provider nào là tốt hơn

Sự lựa chọn Data Provider nào còn phụ thuộc vào nguồn dữ liệu trong ứng dụng. Việc chọng .NET Framework Data Provider có thể cải tiến khả năng chứa, thực thi, tích hợp trong ứng dụng. Bảng sau mô tả tiện lợi và không tiện lợi của Data Provider

Data Provider Note
.NET Framework Data Provider for SQL Server Hiệu quả trong các ứng dụng middle-tier , single-tier applications sử dụng CSDL Microsoft SQL Server.
.NET Framework Data Provider for OLE DB Hiệu quả trong các ứng dụng single-tier applications sử dụng Microsoft Access databases.
.NET Framework Data Provider for ODBC Hiệu quả trong các ứng dụng middle và single-tier sử dụng ODBC data sources.
.NET Framework Data Provider for Oracle Hiệu quả trong các ứng dụng middle và single-tier sử dụng Oracle data sources.

ADO.NET SQL Server Connection

Để kết nối với SQL Server, chúng ta phải cài đặt SQL Server vào hệ thống. Chúng ta sử dụng  SQL Server Management Tool để kết nối với SQL Server. Sau đây là các bước kết nối với SQL Server

  1. Mở Microsoft SQL Server Management Tool

Chọn CSDL và quyền login.

ADO Net SQL Server Connection 1

Sau khi kết nối thành công, sẽ xuất hiện cửa sồ sau:

ADO Net SQL Server Connection 2

2. Tạo CSDL

Bây giờ, tạo CSDL bằng cách chọn vào mục database click chuột phải, xuất hiện cửa sổ menu cho new database

ADO Net SQL Server Connection 3

Click vào  New Database sau đó nhập vào tên database . Chúng ta tạo một CSDL Student.

ADO Net SQL Server Connection 4

Click vào Ok nó sẽ tạo một CSDL có tên Student. Chúng ta nhìn cửa sổ bên trái của màn hình.

ADO Net SQL Server Connection 5

3. Thiết lập kết nối và tạo bảng.

Sau khi tạo xong CSDL, bây giơ, chúng ta tạo bảng bằng code C#. Trong code C# chúng ta kết nối với CSDL student.

After creating database, now, let's create a table by using the following C# code. In this source code, we are using created student database to connect.

Dùng visual studio 2017, Chúng ta tạo một ứng dụng console  .NET với code C#.

  1. Mở Microsoft SQL Server Management Tool
  2. Tạo CSDL
  3. Thiết lập kết nối và tạo bảng

// Program.cs

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().CreateTable();  
        }  
        public void CreateTable()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // writing sql query  
                SqlCommand cm = new SqlCommand("create table student(id int not null,   
                name varchar(100), email varchar(50), join_date date)", con);  
                // Opening Connection  
                con.Open();  
                // Executing the SQL query  
                cm.ExecuteNonQuery();  
                // Displaying a message  
                Console.WriteLine("Table created Successfully");  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong."+e);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }  
        }  
    }  
}  

 Ctrl+F5. Sẽ xuất kết quả sau.

ADO Net SQL Server Connection 6

Chúng ta có thể thấy bảng vừa được tạo trong Microsoft SQL Server Management Studio.

ADO Net SQL Server Connection 7

Như đã thấy bảng vừa tạo chưa có dữ liệu

4. Thêm dữ liệu vào bảng

 // Program.cs

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().CreateTable();  
        }  
        public void CreateTable()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // writing sql query  
                SqlCommand cm = new SqlCommand("insert into student  
                (id, name, email, join_date)values('101','Ronald Trump','ronald@example.com','1/12/2017')", con);  
                // Opening Connection  
                con.Open();  
                // Executing the SQL query  
                cm.ExecuteNonQuery();  
                // Displaying a message  
                Console.WriteLine("Record Inserted Successfully");  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong."+e);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }  
        }  
    }  
}  

Ctrl+F5 và xuất hiện kết quả sau.

ADO Net SQL Server Connection 8

5. Đọc dữ liệu

Code C# đọc dữ liệu từ CSDL.

// Program.cs

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().CreateTable();  
        }  
        public void CreateTable()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // writing sql query  
                SqlCommand cm = new SqlCommand("Select * from student", con);  
                // Opening Connection  
                con.Open();  
                // Executing the SQL query  
                SqlDataReader sdr = cm.ExecuteReader();  
                // Iterating Data  
                while (sdr.Read())  
                {  
                    Console.WriteLine(sdr["id"] + " " + sdr["name"]+" "+sdr["email"]); // Displaying Record  
                }  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong.\n"+e);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }  
        }  
    }  
}  

 

Ctrl+F5  và xuất hiện 2hai sinh viên sau.

ADO Net SQL Server Connection 9

6. Xóa mẫu tin

Hiện tại tronng bảng student có hai mẫu tin. Code C# sau xóa 1 dòng trong bảng.

// Program.cs
 

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().CreateTable();  
        }  
        public void CreateTable()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // writing sql query  
                SqlCommand cm = new SqlCommand("delete from student where id = '101'", con);  
                // Opening Connection  
                con.Open();  
                // Executing the SQL query  
                cm.ExecuteNonQuery();  
                Console.WriteLine("Record Deleted Successfully");  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong.\n"+e);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }  
        }  
    }  
}  

Kết quả:

ADO Net SQL Server Connection 10

Lớp ADO.NET SqlConnection 

Để tương tác với database, bạn phải có một kết nối tới nó. Kết nối giúp xác định database server, database name, user name, password, và các tham số cần thiết để kết nối tới database. Một đối tượng connection được dùng bởi đối tượng command vì thế chúng sẽ biết database nào để thực thi lệnh.

Connection không ngắt kết nối. Do đó, chúng ta phải ngắt kết nối.

SqlConnection 

public sealed class SqlConnection : System.Data.Common.DbConnection, ICloneable, IDisposable  

Phương thức thiết lập SqlConnection 

Constructors Description
SqlConnection() It is used to initializes a new instance of the SqlConnection class.
SqlConnection(String)0 It is used to initialize a new instance of the SqlConnection class and takes connection string as an argument.
SqlConnection(String, SqlCredential) It is used to initialize a new instance of the SqlConnection class that takes two parameters. First is connection string and second is sql credentials.

Các phương thức SqlConnection

Method Description
BeginTransaction() It is used to start a database transaction.
ChangeDatabase(String) It is used to change the current database for an open SqlConnection.
ChangePassword(String, String) It changes the SQL Server password for the user indicated in the connection string.
Close() It is used to close the connection to the database.
CreateCommand() It enlists in the specified transaction as a distributed transaction.
GetSchema() It returns schema information for the data source of this SqlConnection.
Open() It is used to open a database connection.
ResetStatistics() It resets all values if statistics gathering is enabled.

 SqlConnection Example

Trong ví dụ sau chúng ta kết nối với CSDL Student. Code C# sau:

using (SqlConnection connection = new SqlConnection(connectionString))    
{    
  connection.Open();         
}  

 

Using block is used to close the connection automatically. We don't need to call close () method explicitly, using block do this for ours implicitly when the code exits the block.

// Program.cs

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().Connecting();  
        }  
        public void Connecting()  
        {  
            using (  
                     // Creating Connection  
                     SqlConnection con = new SqlConnection("data source=.; database=student; integrated security=SSPI")  
                 )  
            {  
                con.Open();  
                Console.WriteLine("Connection Established Successfully");  
            }  
        }  
    }  
}  

Output:

ADO Net SqlConnection Class 1

What, if we don't use using block.

If we don't use using block to create connection, we have to close connection explicitly. In the following example, we are using try-block instead of using block.

// Program.cs

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().Connecting();  
        }  
        public void Connecting()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                con.Open();  
                Console.WriteLine("Connection Established Successfully");  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong.\n"+e);  
            }  
            finally  
            {   // Closing the connection  
                con.Close();  
            }  
        }  
    }  
}  

Output:

ADO Net Sqlconnection Class 2 

Lớp  ADO.NET SqlCommand 

Lớp này thường được sử dụng để thực thi các câu lệnh SQL. Nó là một lớp sealed (niêm phong) nên không thể kế thừa.

SqlCommand 

public sealed class SqlCommand : System.Data.Common.DbCommand, ICloneable, IDisposable  

Lớp này cung cấp các phương thức thiết lập sau:

Constructor Description
SqlCommand() Đươc sử dụng tạo một đối tượng mới.
SqlCommand(String) Đươc sử dụng tạo một đối tượng mới có một chuỗi tham số.
SqlCommand(String, SqlConnection) Đươc sử dụng tạo một đối tượng mới có hai tham số. tham số đầu tiên là chuỗi truy vấn, tham số thứ 2 là chuỗi kết nối.
SqlCommand(String, SqlConnection, SqlTransaction) Đươc sử dụng tạo một đối tượng mới có ba tham số. tham số đầu tiên là chuỗi truy vấn, tham số thứ 2 là chuỗi kết nối, tham số thứ 3 là một transaction.
SqlCommand(String, SqlConnection, SqlTransaction, SqlCommandColumnEncryptionSetting) Đươc sử dụng tạo một đối tượng mới có : command text, connection, transaction, and encryption setting.

Các phương thức trong SQLCommand

Phương thức Mô tả
BeginExecuteNonQuery() được sử dụng để bắt đầu thực thi không đồng bộ câu lệnh SQL được khai báo  bởi SqlCommand .
Cancel() Hủy thực thi trong đối tượng SqlCommand.
Clone() Tạo ra một đối tượng mới từ đối tượng hiện hành.
CreateParameter() Tạo một đối tượng mới  SqlParameter.
ExecuteReader()

Trả về đối tượng SqlDataReader - thường dùng cho việc đọc kết quả trả về của câu lệnh SQL là 1 tập hợp gồm nhiều hàng, nhiều cột - đối tượng này sẽ được giới thiệu kỹ hơn trong phần sau.

ExecuteNonQuery()

Trả về số hàng bị ảnh hưởng bởi câu lệnh SQL. Thường được sử dụng với các câu lệnh không trả về dữ liệu như Insert, delete, update,...

ExecuteXmlReader()

Trả về đối tượng XmlReader - thường dùng để đọc kết quả trả về của câu lệnh SQL được lưu trữ ở dạng XML.

ExecuteScalar()

Trả về hàng đầu tiên, cột đầu tiên của (một tập hợp) kết quả, các hàng/cột còn lại (nếu có) sẽ bị bỏ qua. Thường được sử dụng với các câu lệnh chỉ trả về 1 hàng, 1 cột kết quả (vd đếm số lượng nhân viên trong công ty).

Prepare() It is used to create a prepared version of the command by using the instance of SQL Server.
ResetCommandTimeout()

Được sử dụng để đặt lại thuộc tính CommandTimeout về giá trị mặc định.

Ví dụ

Trong ví dụ này, chúng ta dùng đối tượng SqlCommand thự thi câu lệnh SQL.

// Program.cs

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().CreateTable();  
        }  
        public void CreateTable()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // writing sql query  
                SqlCommand cm = new SqlCommand("select * from student", con);  
                // Opening Connection  
                con.Open();  
                // Executing the SQL query  
                SqlDataReader sdr = cm.ExecuteReader();  
                while (sdr.Read())  
                {  
                    Console.WriteLine(sdr["name"]+" "+ sdr["email"]);  
                }  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong." + e);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }  
        }  
    }  
}  

Kết quả:

ADO Net Sqlcommand Class 1

Xuất tên và email sinh viên

Lớp ADO.NET SqlDataReader

Bạn có thể đọc dữ liệu từ đối tượng DataReader theo hướng forward-only trong một thứ tự nhất định. Mỗi lần đọc một vài dữ liệu, bạn phải lưu nó nếu cần thiết bởi vì bạn không thể quay trở lại và đọc nó một lần nữa.
Kiểu thiết kế forward-only của DataReader để giúp nó hoạt động nhanh. Nó không thể di chuyển trực tiếp đến các dòng dữ liệu ở vị trí bất kì và không thể ghi vào dữ liệu nguồn. Do đó, nếu bạn chỉ yêu cầu đọc một nhóm dữ liệu một lần và cần phương pháp nhanh nhất, DataReader là lựa chọn tốt nhất.
Tùy theo loại Connection mà DataReader thuộc tên miền:

public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable  

Thuộc tính SqlDataReader 

Thuộc tính Mô tả
Connection Để  kết nối giữa SqlConnection với SqlDataReader.
Depth Lấy một giá trị chỉ ra độ sâu của lồng cho hàng hiện tại..
FieldCount  Trả về số trường có trong record hiện hành.
HasRows Lấy tổng số dòng trong một câu truy vấn.
IsClosed

Trả về giá trị boolean xác định đối tượng DataReader có bị đóng hay không.

Item[String] Trị của cột truyền vào. Tham số truyền vào là tên cột.
Item[Int32] Trị của cột truyền vào. Tham số truyền vào là số chỉ mục, cột đầu tiên là 0.
RecordsAffected Lấy tổng dòng bị ảnh hưởng khi : thêm, cập nhật, xóa.
VisibleFieldCount Lấy số lượng các trường trong SqlDataReader không bị ẩn.

Các phương thức

Phương thức Mô tả
Close() Đóng đối tượng SqlDataReader .
GetBoolean(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu Boolean.
GetByte(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu byte.
GetChar(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu character.
GetDateTime(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu DateTime object.
GetDecimal(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu Decimal object.
GetDouble(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu Double.
GetFloat(Int32) Lấy các giá trị tại cột đang xét tùy vào kiểu FLoat.
GetName(Int32) Lấy tên cột.
GetSchemaTable() Lấy mô tả siêu dữ liệu cột của SqlDataReader.
GetValue(Int32) Lấy về giá trị hoặc tập giá trị ở dạng “nguyên thủy” ( kiểu dữ liệu gốc của Database).
GetValues(Object[]) Được sử dụng để điền vào một mảng các đối tượng với các giá trị cột của hàng hiện tại.
NextResult() Nhóm Kết quả tiếp theo.
Read() Record tiếp theo.

Để tạo ra một đối tượng SqlDataReader , chúng ta phải gọi phương thức  ExecuteReader trong đối tượng SqlCommand.


Ví dụ

Trong ví dụ này, chúng ta sẽ sử dụng SqlDataReader để lấy dữ liệu từ SQL Server. 

// Program.cs 

using System;  
using System.Data.SqlClient;  
namespace AdoNetConsoleApplication  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            new Program().GetData();  
        }  
        public void GetData()  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // writing sql query  
                SqlCommand cm = new SqlCommand("select * from student", con);  
                // Opening Connection  
                con.Open();  
                // Executing the SQL query  
                SqlDataReader sdr = cm.ExecuteReader();  
                while (sdr.Read())  
                {  
                    Console.WriteLine(sdr["name"]+" "+ sdr["email"]);  
                }  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("OOPs, something went wrong." + e);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }  
        }  
    }  
}  

Kết quả:

ADO Net Sqldatareader Class 1

ADO.NET DataSet

Dataset là một mô hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu của ứng dụng. Dataset  chứa các bảng (DataTable) các quanhệ (DataRelation) và các ràng buộc (constraint).
DataSet là một đối tượng chứa dữ liệu trong bộ nhớ và có thể gồm nhiều bảng. DataSet chỉ chứa dữ liệu chứ không tương tác với nguồn dữ liệu. Thay vào đó, SqlDataAdapter sẽ được dùng để quản lý các kết nối với nguồn dữ liệu và cho chúng ta chế độ làm việc disconnected. SqlDataAdapter mở  một kết nối chỉ khi cần thiết và đóng nó ngay sau khi tác vụ được hoàn thành. Ví dụ, SqlDataAdapter thực hiện các tác vụ sau, khi đổ dữ liệu vào DataSet:

DataSet

public class DataSet : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource,   
System.ComponentModel.ISupportInitializeNotification, System.Runtime.Serialization.ISerializable,   
System.Xml.Serialization.IXmlSerializable  

Các phương thức thiết lập 

Constructor Description
DataSet() Khởi tạo một đối tượng mới.
DataSet(String) Khởi tạo một đối tượng mới của lớp Dataset với tên đã cho.
DataSet(SerializationInfo, StreamingContext) Khởi tạo một đối tượng mới của lớp Dataset có thông tin và bối cảnh tuần tự hóa đã cho.
DataSet(SerializationInfo, StreamingContext, Boolean)

Khởi tạo một đối tượng mới của lớp Dataset

 Các thuộc tính

Thuộc tính Mô tả
CaseSensitive Được sử dụng để kiểm tra xem các đối tượng DataTable là chữ hoa hay chữ thường .
DataSetName Lấy hoặc đặt tên cho  DataSet.
DefaultViewManager Được sử dụng để bật chế độ xem tùy chỉnh dữ liệu có trong Bộ dữ liệu để cho phép lọc và tìm kiếm.
HasErrors Được sử dụng để kiểm tra xem có lỗi trong bất kỳ đối tượng DataTable nào trong Bộ dữ liệu này không.
IsInitialized Kiểm tra xem DataSet có được khởi tạo.
Locale Được sử dụng để lấy hoặc gắn thông tin ngôn ngữ được sử dụng để so sánh các chuỗi trong bảng.
Namespace Lấy hoặc đặt namespace của DataSet.
Site Lấy hoặc đặt một  ISite cho DataSet.
Tables Lây toàn bộ các bảng chứa trong DataSet.

Các phương thức của DataSet

Phương thức Mô tả
BeginInit() Khởi tạo DataSet được sử dụng trong form.
Clear() Xóa dữ liệu tất cả các bảng trong DataSet.
Clone() Copy cấu trúc của DataSet.
Copy() Copy cấu trúc và dữ liệu trong Dataset.
CreateDataReader(DataTable[]) Trả về một DataTableReader, Một tập dữ liệu trong  DataTable.
CreateDataReader() Trả về một DataTableReader, Một tập dữ liệu trong  DataTable.
EndInit() Đóng khởi tạo DataSet.
GetXml() Trả về XML  dữ liệu được lưu trữ trong DataSet.
GetXmlSchema() Trả về cấu trúc XML chứa dữ liệu lưu trong DataSet.
Load(IDataReader, LoadOption, DataTable[]) Load Bộ dữ liệu với các giá trị từ nguồn dữ liệu bằng IDataReade.
Merge(DataSet) Trộn một Bộ dữ liệu được chỉ định và lược đồ của nó vào DataSet hiện tại.
Merge(DataTable) Trộn một DataTable được chỉ định và lược đồ DataSet hiện tại.
ReadXml(XmlReader, XmlReadMode) Dùng để đọc lược đồ và dữ liệu XML vào DataSet bằng cách sử dụng XmlReader và XmlReadMode.
Reset() Xóa tất cả các bảng và mối quan hệ trong DataSet.
WriteXml(XmlWriter, XmlWriteMode) Ghi dữ liệu hiện tại và tùy chọn lược đồ cho Bộ dữ liệu bằng cách sử dụng XmlWriter và XmlWriteMode.

Ví dụ:

Trong ví dụ này, chúng ta dùng DataSet và hiểu thị dữ liệu vào Gridview. Hãy tạo một webform có một Gridview.

ADO Net Dataset 1

// DataSetDemo.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataSetDemo.aspx.cs"   
Inherits="DataSetExample.DataSetDemo" %>  
<!DOCTYPE html>  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head>  
<body>  
    <form id="form1" runat="server">  
        <div>  
        </div>  
        <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">  
            <AlternatingRowStyle BackColor="White" />  
            <EditRowStyle BackColor="#2461BF" />  
            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />  
            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />  
            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />  
            <RowStyle BackColor="#EFF3FB" />  
            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />  
            <SortedAscendingCellStyle BackColor="#F5F7FB" />  
            <SortedAscendingHeaderStyle BackColor="#6D95E1" />  
            <SortedDescendingCellStyle BackColor="#E9EBEF" />  
            <SortedDescendingHeaderStyle BackColor="#4870BE" />  
        </asp:GridView>  
    </form>  
</body>  
</html>  

CodeBehind

// DataSetDemo.aspx.cs

using System;  
using System.Data.SqlClient;  
using System.Data;  
namespace DataSetExample  
{  
    public partial class DataSetDemo : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            using (SqlConnection con = new SqlConnection("data source=.; database=student; integrated security=SSPI"))  
            {  
                SqlDataAdapter sde = new SqlDataAdapter("Select * from student", con);  
                DataSet ds = new DataSet();  
                sde.Fill(ds);  
                GridView1.DataSource = ds;  
                GridView1.DataBind();  
            }  
        }  
    }  
}  

 

Sử dụng mô hình phi kết nối DataAdapter

DataAdapter là đối tượng làm trung gian lấy dữ liệu về cho DataSet, để DataSet thực hiện xử lý ngắt kết nối. Do vậy, mặc dù DataAdapter được liệt kê là đối tượng hướng kết nối nhưng thực chất nó phục vụ cho việc ngắt kết nối. Hay nói cách khác, để lầy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng một đối tượng gọi là DataAdapter. Đối tượng này cho phép ta lấy cấu trúc và  dữ liệu của các bảng trong nguồn dữ liệu.

Các đối tượng không kết nối (hay các đối tượng chứa dữ liệu) cho phép
– Lưu trữ một bản sao thông tin lấy từ cơ sở dữ liệu.
– Khi đã ngắt kết nối tới cơ sở dữ liệu.
– Đọc các dòng theo thứ tự bất kỳ
– Tìm kiếm, sắp xếp hay trích lọc các dòng một cách linh hoạt.
– Tạo ra các thay đổi trên dữ liệu, sau đó đồng bộ (cập nhật) các thay đổi này vào cơ sở dữ liệu.

Lớp DataAdapter 

public class DataAdapter : System.ComponentModel.Component, System.Data.IDataAdapter  

Phương thức thiết lập DataAdapter 

Phương thức thiết lập Mô tả
DataAdapter() Khởi tạo một đối tượng mới.
DataAdapter(DataAdapter) Khởi tạo một đối tượng mới từ đối tượng có cùng kiểu.

Các phương thức

Phương thức Mô tả
CloneInternals() Tạo một bản sao.
Dispose(Boolean) Dùng để giải phóng tài nguyên
Fill(DataSet) Thêm dữ liệu cho DataSet
FillSchema(DataSet, SchemaType, String, IDataReader) Thêm một DataTable cho DataSet.
GetFillParameters() Lây các tham số từ câu truy vấn.
ResetFillLoadOption() Thiết lập lại FillLoadOption về trạng thái mặc định.
ShouldSerializeAcceptChangesDuringFill() Xác định liệu thuộc tính AcceptChangesDuringFill có được duy trì hay không.
ShouldSerializeFillLoadOption() Xác định liệu thuộc tính FillLoadOption có được duy trì hay không.
ShouldSerializeTableMappings() Kiểm tra xem một hoặc nhiều đối tượng DataTableMapping có tồn tại hay không.
Update(DataSet) IĐược sử dụng để thực thi câu lệnh INSERT, UPDATE, DELETE .

Ví dụ

// DataSetDemo.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataSetDemo.aspx.cs"   
Inherits="DataSetExample.DataSetDemo" %>  
<!DOCTYPE html>  
  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head>  
<body>  
    <form id="form1" runat="server">  
        <div>  
  
        </div>  
        <asp:GridView ID="GridView1" runat="server" CellPadding="3" BackColor="#DEBA84"   
        BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellSpacing="2">  
            <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />  
            <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />  
            <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />  
            <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />  
            <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />  
            <SortedAscendingCellStyle BackColor="#FFF1D4" />  
            <SortedAscendingHeaderStyle BackColor="#B95C30" />  
            <SortedDescendingCellStyle BackColor="#F1E5CE" />  
            <SortedDescendingHeaderStyle BackColor="#93451F" />  
        </asp:GridView>  
    </form>  
</body>  
</html>  

CodeBehind

using System;  
using System.Data.SqlClient;  
using System.Data;  
namespace DataSetExample  
{  
    public partial class DataSetDemo : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            using (SqlConnection con = new SqlConnection("data source=.; database=student; integrated security=SSPI"))  
            {  
                SqlDataAdapter sde = new SqlDataAdapter("Select * from student", con);  
                DataSet ds = new DataSet();  
                sde.Fill(ds);  
                GridView1.DataSource = ds;  
                GridView1.DataBind();  
            }  
        }  
    }  
}  

Kết quả:

ADO Net Dataadapter 1

 

ADO.NET DataTable

DataTable hiển thị dữ liệu quan hệ thành dạng bảng. ADO.NET cung cấp một lớp DataTable để tạo và sử dụng bảng dữ liệu một cách độc lập. DataTable cũng có thể được sử dụng với Dataset. Ban đầu, khi chúng ta tạo DataTable, DataTable không có lược đồ bảng. Chúng ta có thể tạo lược đồ bảng bằng cách thêm các cột và các ràng buộc vào bảng. Sau khi xác định lược đồ bảng, chúng ta có thể thêm các hàng vào bảng.

Lớp DataTable 

public class DataTable : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource,  
System.ComponentModel.ISupportInitializeNotification, System.Runtime.Serialization.ISerializable,  
System.Xml.Serialization.IXmlSerializable  

Các phương lập của DataTable 

Phương thức thiết lập Mô tả
DataTable() Khởi tạo một đối tượng mới.
DataTable(String) Khới tạo một đối tượng mới có tham số là tên bảng.
DataTable(SerializationInfo, StreamingContext) Khới tạo một đối tượng mới có tham số SerializationInfo và StreamingContext.
DataTable(String, String) Khới tạo một đối tượng mới có tham số là tên bảng và namespace.

Các thuộc tính DataTable 

Thuộc tính Description
Columns Lấy danh sách các cột
Constraints Lấy danh sách các ràng buộc trong bảng.
DataSet Lấy một DataSet trong bảng.
DefaultView It is used to get a customized view of the table that may include a filtered view.
HasErrors Kiểm tra xem có lỗi trong bất kỳ hàng nào trong bảng của DataSet không.
MinimumCapacity Khởi tạo kích thước ban đầu cho bảng.
PrimaryKey danh sách các cột là khóa chính.
Rows Danh sách các mẫu tin.
TableName Tên của bảng dữ liệu.

Các phương thức DataTable  

Phương thức Description
AcceptChanges() Thay đổi dữ liệu trong bảng.
Clear() Xóa tất cả dữ liệu trong DataTable.
Clone() Tạo bảng sao cấu trúc trong DataTable.
Copy() Tạo bảng sao có cấu trúc và dữ liệu trong DataTable.
CreateDataReader() Tạo ra một DataTableReader tương ứng với dữ liệu trong DataTable.
CreateInstance() Tạo ra một đối tượng DataTable mới.
GetRowType() Lấy kiểu dòng dữ liệu.
GetSchema() Lấy lược đồ của bảng.
ImportRow(DataRow) Sao chép một DataRow vào một DataTable.
Load(IDataReader) Được sử dụng để thêm vào DataTable với các giá trị từ nguồn dữ liệu bằng IDataReader được cung cấp.
Merge(DataTable, Boolean) Trộn DataTable với DataTable hiện tại.
NewRow() Tạo một mẫu tin mới.
Select() It is used to get an array of all DataRow objects.
WriteXml(String) It is used to write the current contents of the DataTable as XML using the specified file.

Ví dụ DataTable 

Trong ví dụ này, chúng a sẽ tạo một bảng dữ liệu và xuất nó ra trình duyệt.

// DataTableForm.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataTableForm.aspx.cs"   
Inherits="DataTableDemo.DataTableForm" %>  
<!DOCTYPE html>  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head>  
<body>  
    <form id="form1" runat="server">  
        <div>  
        </div>  
        <asp:GridView ID="GridView1" runat="server">  
        </asp:GridView>  
    </form>  
</body>  
</html>  

 CodeBehind

// DataTableForm.aspx.cs

using System;  
using System.Collections.Generic;  
using System.Data;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
namespace DataTableDemo  
{  
    public partial class DataTableForm : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            DataTable table = new DataTable();  
            table.Columns.Add("ID");  
            table.Columns.Add("Name");  
            table.Columns.Add("Email");  
            table.Rows.Add("101", "Rameez","rameez@example.com");  
            table.Rows.Add("102", "Sam Nicolus", "sam@example.com");  
            table.Rows.Add("103", "Subramanium", "subramanium@example.com");  
            table.Rows.Add("104", "Ankur Kumar", "ankur@example.com");  
            GridView1.DataSource = table;  
            GridView1.DataBind();  
        }  
    }  
}  

Kết quả:

ADO Net Datatabel 1

Ví dụ ADO.NET Web Form 

Trong ví dụ này chúng ta tạo một web form kết nối CSDL với ADO.NET. Trang web có chức năng gửi dữ liệu đến server cho phép lưu các giá trị vào CSDL Server

WebForm

// WebFormAdoNet.aspx
 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFormAdoNet.aspx.cs"   
Inherits="ado.netWebFormExample.WebFormAdoNet" %>  
<!DOCTYPE html>  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
    <style type="text/css">  
        .auto-style1 {  
            width: 100%;  
        }  
        .auto-style2 {  
            width: 100px;  
        }  
        .auto-style3 {  
            width: 95px;  
        }  
    </style>  
</head>  
<body>  
    <form id="form1" runat="server">  
        <div>  
            <table class="auto-style1">  
                <tr>  
                    <td class="auto-style2">  
                       <asp:Label runat="server" Text="User Name" ID="usernamelabelId"></asp:Label></td>  
                    <td>  
                       <asp:TextBox ID="UsernameId" runat="server"></asp:TextBox></td>  
                </tr>  
                <tr>  
                    <td class="auto-style2">  
                        <asp:Label runat="server" Text="Email ID"></asp:Label></td>  
                    <td>  
                        <asp:TextBox ID="EmailId" runat="server"></asp:TextBox></td>  
                </tr>  
                <tr>  
                    <td class="auto-style2">  
                        <asp:Label runat="server" Text="Contact"></asp:Label></td>  
                    <td>  
                        <asp:TextBox ID="ContactId" runat="server"></asp:TextBox></td>  
                </tr>  
                <tr>  
                    <td class="auto-style2"></td>  
                    <td>  
                        <asp:Button ID="ButtonId" runat="server" Text="Submit" OnClick="ButtonId_Click" /></td>  
                </tr>  
            </table>  
        </div>  
    <div>  
        <asp:Label ID="Label1" runat="server"></asp:Label>  
    </div>  
    </form>  
    <table class="auto-style1">  
        <tr>  
            <td class="auto-style3">  
                <asp:Label ID="Label2" runat="server"></asp:Label></td>  
            <td>  
                <asp:Label ID="Label5" runat="server"></asp:Label></td>  
        </tr>  
        <tr>  
            <td class="auto-style3">  
                <asp:Label ID="Label3" runat="server"></asp:Label></td>  
            <td>  
                <asp:Label ID="Label6" runat="server"></asp:Label></td>  
        </tr>  
        <tr>  
            <td class="auto-style3">  
                <asp:Label ID="Label4" runat="server"></asp:Label></td>  
            <td>  
                <asp:Label ID="Label7" runat="server"></asp:Label></td>  
        </tr>  
    </table>  
    </body>  
</html>  

CodeBehind

// WebFormAdoNet.aspx.cs

using System;  
using System.Data.SqlClient;  
namespace ado.netWebFormExample  
{  
    public partial class WebFormAdoNet : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
        }  
        protected void ButtonId_Click(object sender, EventArgs e)  
        {  
            SqlConnection con = null;  
            try  
            {  
                // Creating Connection  
                con = new SqlConnection("data source=.; database=student; integrated security=SSPI");  
                // Writing insert query  
                string query = "insert into student(name,email,contact)values('"+UsernameId.Text+ "',  
                '" + EmailId.Text + "','" + ContactId.Text + "')";  
                SqlCommand sc = new SqlCommand(query,con);  
                // Opening connection  
                con.Open();  
                // Executing query  
                int status = sc.ExecuteNonQuery();  
                Label1.Text = "Your record has been saved with the following details!";  
                // ----------------------- Retrieving Data ------------------ //  
                SqlCommand cm = new SqlCommand("select top 1 * from student", con);  
                // Executing the SQL query  
                SqlDataReader sdr = cm.ExecuteReader();  
                sdr.Read();  
                    Label2.Text = "User Name"; Label5.Text = sdr["name"].ToString();  
                    Label3.Text = "Email ID";  Label6.Text = sdr["email"].ToString();  
                    Label4.Text = "Contact";   Label7.Text = sdr["contact"].ToString();                  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine("OOPs, something went wrong." + ex);  
            }  
            // Closing the connection  
            finally  
            {  
                con.Close();  
            }            
        }  
    }  
}  

Kết quả:

Chạy lần đầu.

ADO Net Webform Example 1

Nhập liệu vào trong form và gửi đi.

ADO Net Webform Example 2

Sau khi submit, Dữ liệu được lưu trữ trong CSDL và trả về cho người dùng.

ADO Net Webform Example 3

Ví dụ ADO.NET MVC

MVC (Model View Controller) là một mẫu ứng dụng web được sử dụng trong phát triển ứng dụng web. Trong ví dụ này, Chúng ta tạo một ứng dụng MVC kết nối với CSDL SQL Server.

Ứng dụng này chứa một Model, một View và một Controller.

Model

// Student.cs

using System;  
using System.ComponentModel.DataAnnotations;  
namespace Ado.NetMvcApplication.Models  
{  
    public class Student  
    {  
        public int ID { get; set; }  
        // -- Validating Student Name  
        [Required(ErrorMessage = "Name is required")]  
        [MaxLength(12)]  
        public string Name { get; set; }  
        // -- Validating Email Address  
        [Required(ErrorMessage = "Email is required")]  
        [EmailAddress(ErrorMessage = "Invalid Email Address")]  
        public string Email { get; set; }  
        // -- Validating Contact Number  
        [Required(ErrorMessage = "Contact is required")]  
        [DataType(DataType.PhoneNumber)]  
        [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid Phone number")]  
        public string Contact { get; set; }  
    }  
}  

View

// Index.cshtml

@model Ado.NetMvcApplication.Models.Student  
@{  
    ViewBag.Title = "Index";  
}  
<h2>Index</h2>  
@using (Html.BeginForm("Save", "Students"))  
{  
    @Html.AntiForgeryToken()  
      
    <div class="form-horizontal">  
        <h4>Student</h4>  
        <hr />  
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })  
        <div class="form-group">  
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })  
            <div class="col-md-10">  
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })  
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })  
            </div>  
        </div>  
        <div class="form-group">  
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })  
            <div class="col-md-10">  
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })  
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })  
            </div>  
        </div>  
        <div class="form-group">  
            @Html.LabelFor(model => model.Contact, htmlAttributes: new { @class = "control-label col-md-2" })  
            <div class="col-md-10">  
                @Html.EditorFor(model => model.Contact, new { htmlAttributes = new { @class = "form-control" } })  
                @Html.ValidationMessageFor(model => model.Contact, "", new { @class = "text-danger" })  
            </div>  
        </div>  
        <div class="form-group">  
            <div class="col-md-offset-2 col-md-10">  
                <input type="submit" value="Create" class="btn btn-default" />  
            </div>  
        </div>  
    </div>  
}  
@section Scripts {  
    @Scripts.Render("~/bundles/jqueryval")  
}  

Controller

// StudentsController.cs

using System.Web.Mvc;  
using Ado.NetMvcApplication.Models;  
using System.Data.SqlClient;  
namespace Ado.NetMvcApplication.Controllers  
{  
    public class StudentsController : Controller  
    {  
        // GET: Students  
        public ActionResult Index()  
        {  
            return View();  
        }  
        [HttpPost]  
        public ContentResult Save(Student student)  
        {  
            string status = "";  
            // Creating Connection  
            using (SqlConnection con = new SqlConnection("data source=.; database=student; integrated security=SSPI"))  
            {  
                // Insert query  
                string query = "INSERT INTO student(name,email,contact) VALUES(@name, @email, @contact)";  
                using (SqlCommand cmd = new SqlCommand(query))  
                {  
                    cmd.Connection = con;  
                    // opening connection  
                    con.Open();  
                    // Passing parameter values  
                    cmd.Parameters.AddWithValue("@name", student.Name);  
                    cmd.Parameters.AddWithValue("@email", student.Email);  
                    cmd.Parameters.AddWithValue("@contact", student.Contact);  
                    // Executing insert query  
                    status = (cmd.ExecuteNonQuery() >= 1) ?  "Record is saved Successfully!" : "Record is not saved";  
                    status += "<br/>";  
                }  
                    // Executing select command  
                using (SqlCommand cmd = new SqlCommand("select * from student"))  
                {  
                    cmd.Connection = con;  
                    // Retrieving Record from datasource  
                    SqlDataReader sdr = cmd.ExecuteReader();  
                    // Reading and Iterating Records  
                    while (sdr.Read())  
                    {  
                        status += "<b>name:</b> "+sdr["name"]+"<br/> <b>Email:</b> "+sdr["email"]+"<br> <b>Contact:</b> "+sdr["contact"];  
                    }  
                }  
                return Content(status);  
            }  
        }  
    }  
}  

Kết quả:

ADO Net Mvc Example 1

Sau khi gửi đi, dữ liệu được lưu vào CSDL SQL Server và trả kết quả về cho trình duyệt.

ADO Net Mvc Example 2