ADO.NET主要分為五個對象:
1)Connection對象:用來連接程序與數據庫。沒有利用連接對象將數據庫打開,是無法從數據庫中取得數據的。Close和Dispose的區別,Close之后還可以用Open打開數據庫,Dispose是釋放資源,Dispose之后將不能再用Open。
2)Command對象:主要迎來對數據庫發出一些指令,例如增刪改查等指令,另外也可以調用數據庫中的存儲過程,這個對象時架構在Connection對象上,也就是Command對象是透過Connection連接到數據源。
3)DataAdapter:主要用在數據源以及DataSet之間執行數據傳輸的工作,可以通過Command對象下達命令之后,將取得的數據放入DataSet中,這個對象是架構在Command對象上,並提供了許多配合DataSetshiyong 的功能。
4)DataSet:這個對象可是看作是一個暫存區(暫時存儲區域),可以把從數據庫中所查詢到的數據保留起來,甚至可以將整個數據庫顯示出來,DataSet是存放在內存中的,DataSet不僅可以存儲多個Table,還可以通過DataAdapter對象取得一些例如主鍵的呢過的數據表結構,並可以記錄數據表之間的關聯。DataSet對象可以說是ADO.NET中的重量級對象,這個對象架構在DataAdapter對象上,本身不具備和數據源溝通的能力,也就是說,我們是將DataAdapter對象當做是DataSet與數據源DB之間的橋梁 ,DataSet中包含若干DataTable,DataTable中包含若干DataRow。
5)DataReader:當我們只需要循環的讀取數據而不需要其他的操作的時候,可以使用DataReader對象。DataReader對象只是一次一條向下循環的讀取數據源中的數據,這些數據是存在數據庫服務器中的,而不是一次性加載到程序的內存中的,只能讀取到當前行的數據,而且這些數據只是只讀的,並不允許其他操作。因為DataReader在讀取數據的時候限制了一次一條的讀取,而且只能只讀,所以使用起來不但節省資源而且效率很好,使用DataReader對象除了效率好之外,因為不用把數據全部傳回,因此可以降低網絡的負載。
總結:ADO.NET使用Connection對象來連接數據庫,使用Command對象或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader或者DataAdapter,然后在使用取得的DataReader或者DataAdapter對象操作數據結果。
以下是常用的sqlHelper.cs(部分功能實現):

using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using System.Data; using System.Data.SqlClient; namespace WebApplication1.WebHelper { public static class SqlHelper { //取得連接字符串 public static readonly string connString = ConfigurationManager.ConnectionStrings["defaultConnString"].ConnectionString; //sql操作過程:打開連接-->創建命令-->給sql語句-->執行語句-->處理結果 public static int ExecuteNonQuery(string sql) { using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; //返回執行sql語句影響的行數 return cmd.ExecuteNonQuery(); } } } public static object ExecuteScalar(string sql) { using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; return cmd.ExecuteScalar(); } } } //只用來執行查詢結果比較少的sql public static DataSet ExecuteDataSet(string sql) { //方法1 //using (SqlConnection conn = new SqlConnection(connString)) //{ // conn.Open(); // using (SqlCommand cmd = conn.CreateCommand()) // { // cmd.CommandText = sql; // SqlDataAdapter adapter = new SqlDataAdapter(cmd); // DataSet ds = new DataSet(); // adapter.Fill(ds); // return ds; // } //} //方法2 using (SqlConnection conn = new SqlConnection(connString)) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd,conn,sql); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataSet ds = new DataSet(); adapter.Fill(ds); return ds; } ; } } public static void PrepareCommand(SqlCommand cmd,SqlConnection conn, string sql) { if (conn.State != ConnectionState.Open) { conn.Open(); } cmd.Connection = conn; cmd.CommandText = sql; } } }