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

ADO.NET 入門基石(一):SqlConnection、SqlCommand、SqlDataReader 核心類別與資料庫互動原理

     編輯:關於.NET

前言:程式與資料庫的「外交關係」

程式無法直接操作資料庫,需透過「介面」溝通。ADO.NET 提供三大核心類別建立連線、發送命令、讀取結果。

核心類別職責

  • SqlConnection:專責建立與 SQL Server 連線,管理連線字串
  • SqlCommand:封裝 SQL 命令發送至資料庫,接收執行結果(影響列數/結果集)
  • SqlDataReader:提供唯讀、順向的資料流讀取方式

基本互動流程

string strSql = "select top 10 city from Customers";
SqlConnection cn = new SqlConnection();
cn.ConnectionString = WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
SqlCommand cmd = new SqlCommand(strSql, cn);
cmd.CommandType = CommandType.Text;
cn.Open();  // 必須顯式開啟連線

// 三種執行方式:
// cmd.ExecuteNonQuery();  // INSERT/UPDATE/DELETE,回傳影響列數
// cmd.ExecuteReader();    // SELECT,回傳 SqlDataReader
// cmd.ExecuteScalar();    // 單一值查詢,回傳 object

SqlDataReader 深度解析

運作機制

  1. ExecuteReader() 發送查詢命令
  2. 資料庫執行查詢,將結果集回傳給 SqlCommand
  3. SqlCommand 建立 SqlDataReader 並封裝結果集
  4. Read() 逐筆讀取 SqlDataReader 內部資料(非逐筆查詢資料庫)
  5. GetXxx() 或索引器 dr["city"] 取得欄位值

完整讀取範例

SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read()) {
    lbTest.Items.Add(new ListItem(dr["city"].ToString()));
}
dr.Close(); cn.Close();

注意: 使用 SqlDataReader 期間必須保持連線開啟,關閉連線即失效。

ExecuteNonQuery vs ExecuteReader 差異

  • ExecuteNonQuery:執行異動命令(INSERT/UPDATE/DELETE),回傳影響列數。若送 SELECT 會回傳 -1 不執行
  • ExecuteReader:執行查詢命令,回傳 SqlDataReader。實測送 UPDATE 也能執行但不建議混用

比喻理解

A 廠(程式)要 B 廠(資料庫)產品:修路(SqlConnection)→ 派車送訂單(SqlCommand)→ B 廠生產裝車→ A 廠收貨。SqlCommand 是唯一直接接觸資料庫的物件。

SqlDataAdapter 與 DataSet 預告

SqlDataReader 需保持連線且唯讀。若需離線操作資料,請期待下一篇介紹的 SqlDataAdapter 與 DataSet——可將資料載入記憶體斷線處理。

嚴重注意: 本文為個人理解筆記,可能有誤,請參考官方文件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved