Home [ADO.NET] 什麼是 ADO.NET?
Post
Cancel

[ADO.NET] 什麼是 ADO.NET?

ADO.NET 是用來開啟資料存取與操作服務的。

System.Data命名空間提供了不同的ADO.NET類,它們既分工明確,又相互協作地提供表格資料的存取服務。此類別庫包含兩組重要的類別:一組負責處理軟體內部的實際資料(DataSet),一組負責與外部資料系統通訊(.NET Framework Data Provider)。

ADO.NET 用於存取及操作資料的兩個主要元件是:

1. 資料存取 (DataSet)

  • DataSet:資料集。用於保存查詢資料的一種結構。(中斷連接)

2. 操作服務

  • Connection 物件:連接DB。與特定的資料來源建立連接。
  • Command 物件:執行SQL命令。用來對資料來源執行SQL命令:選取、新增、修改、刪除。
  • DataReader 物件:資料讀取器,從資料來源順向唯讀取出資料流。(保持連接-不斷開)
  • DataAdapter 物件:資料配接器。扮演資料來源與DataSet之間的中介角色,把Command 物件所執行SQL命令的結果,填入DataSet中,並更新解析資料來源。

Architecture of ADO.NET

1
2
using System.Data; //使用ado.net
using System.Data.SqlClient; //存取 sql server db
  • System.Data.SqlClient 讓您能夠存取 SQL Server 版本,其中封裝了資料庫專屬的通訊協定。

1. 資料存取 (DataSet)

僅有 SQL Select 指令讀取資料時可使用 DataSet ,DataSet 物件是由 DataTable 物件組成的集合物件,DataSet 物件代表儲存在記憶體的資料庫,每一個 DataTable 儲存一個資料表的記錄資料,並且可以設定資料表間的關聯性(Relationship)。

DataSet 的設計已明確指出它可獨立於任何資料來源外而存取資料。 因此,它可與多個不同的資料來源搭配使用、與 XML 資料搭配使用,或用來管理應用程式的本機資料。 DataSet 包含一或多個由資料列和資料行所組成的 DataTable 物件集合,以及 DataTable 物件中的主索引鍵、外部索引鍵、條件約束 (Constraint) 及資料的關聯資訊。

2. 操作服務

.NET Framework 資料提供者提供了四個核心元件:

  • Connection物件,負責與DB連接,開啟資料庫 (Open) 及關閉資料庫 (Close)。
  • Command物件,負責與 Connection 溝通,下達 SQL 指令 (CommandText) (Select、Insert、Update、Delete)

物件可讓您存取資料庫命令,以便傳回資料、修改資料、執行預存程序 (Stored Procedure),並且傳送或擷取參數資訊。

  • DataReader物件,資料讀取器(forward-only & read-only),使用 Command 物件執行指令,從資料來源順向(只能向前讀取,不能往後) ,只能讀取不能寫入(唯讀Read-Only)。

僅有 SQL Select 指令讀取資料時可使用 DataReader ,從資料來源使用 Command 物件執行指令,取得唯讀(Read-Only)和只能向前(Forward-Only)的串流資料,每一次只能從資料來源讀取一列資料(即一筆)儲存到記憶體,所以執行效率非常高。

  • DataAdapter物件,資料配接器,它是 DataSetConnection 物件資料連接間的橋樑(中介角色),可以將Command物件所執每SQL命令的結果填入DataSet 物件中,並更新解析回資料來源。

command 常用方法:

  • command.ExecuteNonQuery(): 傳回受影響函數,如增、刪、改操作;
  • command.ExecuteScalar():執行查詢,傳回首行首列的結果;
  • command.ExecuteReader():傳回一個資料流(SqlDataReader物件)。

常用操作

1. 執行SQL

1
2
3
4
5
6
SqlCommand cmd = conn.CreateCommand(); //建立SqlCommand物件

cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from products = @ID"; //sql語句
cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.Parameters["@ID"].Value = 1; //給參數sql語句的參數賦值

2. 調用 預存程序

1
2
3
4
SqlCommand cmd = conn.CreateCommand();

cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "預存程序名稱";

3. 整張表

1
2
3
4
SqlCommand cmd = conn.CreateCommand();

cmd.CommandType = System.Data.CommandType.TableDirect;
cmd.CommandText = "表名"

MSDN - ADO.NET 架構
MSDN - ADO.NET 架構 (選擇 DataReader 或 DataSet)
MSDN - 使用 DataReader 擷取資料
MSDN - DataSet 類別
MVCNF03-ADO.NET by JohnsonNote
[C# 筆記][ADO.Net] ExecuteNonQuery的回傳值

This post is licensed under CC BY 4.0 by the author.

[ADO.NET] ExecuteNonQuery 的回傳值

[ADO.NET] Connection 物件 (連線到 SQL Server)