一、ADO.NET概要
ADO.NET 是一組向 .NET Framework 程序員公開數據訪問服務的類。 ADO.NET 為創建分布式數據共享應用程序提供了一組豐富的組件。 它提供了對關系數據、XML 和應用程序數據的訪問,因此是 .NET Framework 中不可缺少的一部分。 ADO.NET 支持多種開發需求,包括創建由應用程序、工具、語言或 Internet 瀏覽器使用的前端數據庫客戶端和中間層業務對象。
上面羅里吧嗦地說了這么多,其實呢,就一句話:ADO.NET就是為我們操作數據庫提供了很多類的一種框架。相比ORM框架,ADO.NET的性能是最快的,畢竟ORM是在ADO.NET的基礎上再次進行了封裝。ORM框架一般用於小項目,當數據量達到3W左右,性能大大降低,這時便成為了惡夢。但是呢,ADO.NET需要自己純粹地手寫sql語句,對sql的語法掌握要求比較高。
二、ADO.NET中的核心DataSet與執行流程
DataSet結構圖:
使用ADO.NET獲取數據流程圖:
三、ADO.NET五大對象
1、Connection對象---連接數據庫
//代碼示例
SqlConnection connection = new SqlConnection("sql連接數據庫字符串");//SqlConnection只針對sql server數據庫
connection.Open();//打開連接
connection.Close();//關閉連接
2、Command對象---執行sql語句、事務、存儲過程
//代碼示例
string sqlString="select * from Member";//sql語句
SqlCommand command= new SqlCommand (sqlString,connection);//connection指的是Connection對象
int rows = command.ExecuteNonQuery();//返回執行sql語句所影響的數據的行數
object obj = command.ExecuteScalar();//返回第一行第一列的值
3、DataAdapter對象---數據適配器,填充數據到DataSet
//代碼示例
DataSet ds=new DataSet();
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter(command);
sqlDataAdapter.Fill(ds);//將數據填充到DataSet
4、DataSet對象---ADO.NET的核心
將得到的數據復制一份保存到內存中,極大地減少了數據庫服務器的壓力。
/// <summary>
/// 執行查詢語句,返回DataSet
/// </summary>
/// <param name="SQLString">查詢語句</param>
/// <returns>DataSet</returns>
public static DataSet Query(string SQLString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
5、DataReader---數據讀取器,只讀模式,用的比較少
/// <summary>
/// 執行查詢語句,返回SqlDataReader ( 注意:調用該方法后,一定要對SqlDataReader進行Close )
/// </summary>
/// <param name="strSQL">查詢語句</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader ExecuteReader(string strSQL)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(strSQL, connection);
try
{
connection.Open();
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return myReader;
}
catch (System.Data.SqlClient.SqlException e)
{
throw e;
}
}
四、實際項目中的使用情況
后端程序員編寫sql語句,執行后得到DataSet,從DataSet中得到DataTable,復雜的情況下,再對DataTable使用Select()方法進行再次查詢,最后將得到的數據json序列化返回。
我們在項目中,應該會看到DbHelperSQL這個類,這個類便是將ADO.NET的五大對象進行了封裝,讓我們只需編寫sql語句就可以了,不用關心數據庫的連接跟sql的執行。
五、總結
ADO.NET主要對程序員sql技能稍微高點,也是一種比較底層的框架,因此操作數據庫最快。