首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ADO.NET 核心物件全方位解析:連線、命令、資料閱讀器、資料配接器與離線資料集

     編輯:關於ASP.NET

ADO.NET 架構概覽

ADO.NET 提供兩種存取模式:

  • 連線導向:`Connection`、`Command`、`DataReader` - 需保持資料庫連線,適合唯讀、順向、大量資料流式處理。
  • 離線導向:`DataAdapter`、`DataSet`、`DataTable` - 將資料載入記憶體模型,斷線操作,適合複雜關聯、多表、UI 繫結。

記憶體資料模型對應關係

實體資料庫記憶體模型 (ADO.NET)
DatabaseDataSet
Table / ViewDataTable / DataView
RowDataRow
ColumnDataColumn
Relation (FK)DataRelation
Constraint (PK/Unique)UniqueConstraint / ForeignKeyConstraint

六大核心物件詳解

1. Connection - 連線物件

`SqlConnection` (SQL Server)、`OleDbConnection` (Access/其他)。關鍵:連線字串、開啟/關閉、連線池 (`Pooling=true` 預設開啟)。

using (var conn = new SqlConnection(connStr))
{
    conn.Open(); // 從連線池取得或建立實體連線
    // 執行命令...
} // 自動釋放回連線池

2. Command - 命令物件

執行 SQL/預存程序。`CommandType`:`Text` (預設)、`StoredProcedure`、`TableDirect`。參數化查詢防 SQL Injection。

using (var cmd = new SqlCommand("SELECT * FROM Users WHERE Age > @Age", conn))
{
    cmd.Parameters.AddWithValue("@Age", 18);
    // ExecuteReader / ExecuteScalar / ExecuteNonQuery
}

3. DataReader - 唯讀順向資料流

`SqlDataReader`:高效能、低記憶體、只能向前讀取一筆。`Read()` 推進至下一筆,`GetXxx(ordinal)` 取值。

using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        int id = reader.GetInt32(0);
        string name = reader.GetString(1);
    }
}

4. DataAdapter - 橋接器

`SqlDataAdapter`:`SelectCommand`/`InsertCommand`/`UpdateCommand`/`DeleteCommand`。`Fill(DataSet)` 載入資料,`Update(DataSet)` 批次寫回資料庫。

5. DataSet - 記憶體資料庫容器

包含 `Tables` (DataTableCollection)、`Relations` (DataRelationCollection)。支援 XML 序列化 (`WriteXml`/`ReadXml`)、異動追蹤 (`GetChanges`/`AcceptChanges`/`RejectChanges`)。

6. DataTable - 記憶體資料表

核心屬性:`Columns` (DataColumnCollection)、`Rows` (DataRowCollection)、`Constraints`、`PrimaryKey`、`DefaultView` (DataView)。支援 `Select(filter)`、`Compute(agg, filter)`、`ImportRow`、`Merge`。

DataRow 與 DataColumn 細節

  • DataRow:`RowState` (Added/Modified/Deleted/Unchanged/Detached)、`Item[column]` 存取、`BeginEdit`/`EndEdit`/`CancelEdit` 批次編輯。
  • DataColumn:`DataType`、`AllowDBNull`、`Unique`、`AutoIncrement`/`AutoIncrementSeed`/`AutoIncrementStep`、`Expression` (計算欄位)、`ColumnMapping` (XML 對應)。

進階主題

參數化 SQL 與預存程序

永不拼接字串。`Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = val;` 明確指定型別長度可重用执行计划。

分頁查詢 (SQL Server)

-- SQL Server 2012+ OFFSET FETCH
SELECT * FROM Users ORDER BY UserId OFFSET @PageSize * (@PageIndex - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;

-- 通用 CTE 分頁 (2005+)
WITH Paged AS (SELECT *, ROW_NUMBER() OVER (ORDER BY UserId) AS RN FROM Users)
SELECT * FROM Paged WHERE RN BETWEEN @Start AND @End;

交易控制

using (var conn = new SqlConnection(connStr))
{
    conn.Open();
    using (var tran = conn.BeginTransaction())
    {
        try
        {
            // 多個命令共用 tran
            tran.Commit();
        }
        catch { tran.Rollback(); throw; }
    }
}

總結

ADO.NET 以 `Connection`/`Command`/`DataReader` 構建高效連線模式,以 `DataAdapter`/`DataSet`/`DataTable` 構建豐富離線模型。根據場景選擇:大量唯讀串流用 `DataReader`;複雜關聯、UI 繫結、多層傳遞用 `DataSet`。參數化查詢、連線池、交易控制是寫出健壯資料存取程式的鐵律。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved