在 .NET 框架推出初期,ADO.NET 作為核心資料存取技術,徹底改變了開發者與資料庫互動的方式。本文將深入淺出地解析 ADO.NET 的架構演進、核心類別庫,並透過兩個完整的實戰範例,示範如何利用 SqlClient 與 OleDb 提供者,高效完成資料操作與資料庫物件建立。
早期的 ActiveX Data Objects (ADO) 採用連線導向架構,深度依賴 COM 元件與 OLE DB,雖然支援 VB、VC++、ASP 等多種語言,但在斷點續傳、XML 整合與多執行緒支援上顯得力不從心。ADO.NET 作為 .NET 策略的關鍵組件,引入了斷線式架構,核心在於 DataSet 這個記憶體內資料快取,讓資料操作脫離持續連線的束縛,極大提升了延展性與效能。
針對不同資料庫,.NET Framework 提供了優化的提供者:
幸運的是,這三者在程式設計介面上高度一致,掌握一套核心流程即可觸類旁通:建立連線 → 開啟連線 → 執行命令。
利用 Visual Studio 設計工具與 SqlDataAdapter 精靈,我們能在幾分鐘內完成一個具備新增、刪除、修改功能的資料表單,核心程式碼僅需兩行:
// Form 載入時填充資料
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSet11, "Table1")
End Sub
// 按鈕點擊時更新資料庫
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SqlDataAdapter1.Update(DataSet11, "Table1")
End Sub
關鍵元件解析:
SqlDataAdapter:橋接 DataSet 與資料庫,自動生成 Select/Insert/Update/Delete 命令。SqlConnection:管理連線字串與連線池。DataSet:記憶體內關聯式資料快取,支援多資料表、關聯與條件約束。SqlCommand:封裝 T-SQL 陳述式或預存程序。為了展示提供者之間的相似性,本範例改用 OleDbConnection 與 OleDbCommand,執行 DDL 陳述式(CREATE DATABASE、CREATE TABLE)來建立資料庫結構。關鍵在於連線字串的調整:建立新資料庫時必須連接既有資料庫(如 Northwind)以取得管理權限,後續操作再切換至新建立的資料庫。
// 建立資料庫 jk
Dim con As New OleDbConnection("Provider=SQLOLEDB.1;...;Initial Catalog=Northwind;...")
con.Open()
Dim cmd As New OleDbCommand("CREATE DATABASE jk", con)
cmd.ExecuteNonQuery()
con.Close()
// 在 jk 中建立資料表
Dim con2 As New OleDbConnection("...;Initial Catalog=jk;...")
con2.Open()
Dim cmd2 As New OleDbCommand("CREATE TABLE kk (id INT IDENTITY(1,1) PRIMARY KEY, name CHAR(4) NOT NULL)", con2)
cmd2.ExecuteNonQuery()
con2.Close()
ADO.NET 的精髓在於「斷線式資料操作」與「提供者模式」的結合。實務開發中建議:
using 區塊確保連線與命令物件正確釋放。SqlBulkCopy 或 Table-Valued Parameters。透過本文的兩個範例,讀者應能掌握 ADO.NET 從基礎查詢到結構管理的核心技能,為進階資料存取架構(如 Entity Framework Core)打下堅實基礎。