ADO.NET 是微軟推出的新一代資料存取技術,繼承自經典 ADO,專為 .NET Framework 設計,支援斷線式架構與高效能資料操作。本文將透過一個完整的 WinForm 範例,詳細講解三大核心物件:Connection、Command、DataReader 的實際應用。
Connection 物件代表與資料來源的唯一連線。透過連線字串指定伺服器、資料庫、認證等資訊。常用方法:
Open():建立實體連線Close():釋放連線資源最佳實務:盡量縮短連線開啟時間,用完即關,或使用 using 區塊自動管理。
Command 封裝在資料來源上執行的 SQL 陳述式或預存程序。主要方法:
ExecuteNonQuery():執行 INSERT/UPDATE/DELETE,回傳影響筆數ExecuteReader():執行 SELECT,回傳 DataReader 唯讀、順向資料流ExecuteScalar():執行查詢,回傳第一筆第一欄的值(如 COUNT(*))DataReader 提供快速、順向、唯讀的資料存取。不直接實例化,而是透過 Command.ExecuteReader() 取得。常用方法:
Read():移至下一筆記錄,無資料則回傳 falseGetValue(index):取得指定欄位值Close():關閉 Reader,釋放連線建立 Users 表:ID(PK, Identity)、Username、Userpwd。
using System.Data.SqlClient;
public class DataBase
{
// 連線字串:本機 SQL Server,資料庫 qq,sa/sa
private SqlConnection conn = new SqlConnection(@"server=.;database=qq;uid=sa;pwd=sa");
protected SqlConnection Conn
{
get { return conn; }
}
}
public class Users : DataBase
{
// 新增用戶
public int Add(string name, string pwd)
{
string sql = "INSERT INTO Users (Username, Userpwd) VALUES ('" + name + "', '" + pwd + "')";
Conn.Open();
SqlCommand cmd = new SqlCommand(sql, Conn);
int result = cmd.ExecuteNonQuery();
Conn.Close();
return result;
}
// 刪除用戶
public int Delete(int id)
{
string sql = "DELETE FROM Users WHERE ID = " + id;
Conn.Open();
SqlCommand cmd = new SqlCommand(sql, Conn);
int result = cmd.ExecuteNonQuery();
Conn.Close();
return result;
}
// 更新用戶
public int Update(int id, string name, string pwd)
{
string sql = "UPDATE Users SET Username='" + name + "', Userpwd='" + pwd + "' WHERE ID=" + id;
Conn.Open();
SqlCommand cmd = new SqlCommand(sql, Conn);
int result = cmd.ExecuteNonQuery();
Conn.Close();
return result;
}
// 取得所有用戶名稱列表(供 ComboBox 使用)
public ArrayList GetUserList()
{
string sql = "SELECT Username FROM Users";
ArrayList list = new ArrayList();
SqlCommand cmd = new SqlCommand(sql, Conn);
Conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
list.Add(dr.GetValue(0));
}
Conn.Close();
return list;
}
}
注意: 範例為教學示範,實際專案請務必使用參數化查詢防止 SQL Injection。
public partial class Form2 : Form
{
private Users u = new Users();
private void Form2_Load(object sender, EventArgs e)
{
// 載入用戶名稱至下拉選單
foreach (string name in u.GetUserList())
{
comboBox1.Items.Add(name);
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
if (u.Add(txtName.Text, txtPwd.Text) > 0)
MessageBox.Show("新增成功!");
else
MessageBox.Show("新增失敗,請聯繫管理員。");
}
}
本文建立了 ADO.NET 連線式架構的基礎操作流程。下一篇將介紹斷線式架構的核心——DataAdapter、DataSet、DataTable,實現更靈活的資料綁定與離線操作。
本文出自「共享經驗」部落格,原文連結:https://jianle.blog.51cto.com/429692/107785