在 C# 開發中,資料庫操作是核心技能之一。資料庫操作大致可分為「查詢」與「更新」兩大類:查詢僅從資料庫取出資料供使用,而更新包含新增、刪除、修改,會實際異動資料庫的實體資料。本文承接前一篇查詢教學,詳細說明如何使用 OleDbCommand 物件執行更新操作,並透過完整範例示範增、刪、改功能的實作。
執行更新操作的關鍵在於 OleDbCommand 物件,它代表要對資料來源執行的 SQL 陳述式或預存程序。主要屬性包括:
設定完成後,呼叫 ExecuteNonQuery() 方法即可執行更新語句。記憶技巧:「ExecuteNonQuery」拆解為「執行、非、查詢」,即代表執行更新操作,回傳影響的資料列數。
為了複用連線邏輯,建立 ConnDb 類別封裝連線、查詢、更新與關閉連線功能:
public class ConnDb
{
private OleDbConnection conn = null;
public ConnDb()
{
if (conn == null)
{
conn = new OleDbConnection();
conn.ConnectionString = "provider=sqloledb.1;data source=.;initial catalog=capucivar;user id=sa;pwd=";
}
if (conn.State == ConnectionState.Closed)
conn.Open();
}
public DataSet Query(string sql)
{
DataSet ds = new DataSet();
using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
da.Fill(ds);
CloseConn();
return ds;
}
public int Update(string sql)
{
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.CommandType = CommandType.Text;
int affected = cmd.ExecuteNonQuery();
CloseConn();
return affected;
}
}
public void CloseConn()
{
if (conn?.State == ConnectionState.Open)
conn.Close();
}
}
使用 Visual Studio 建立簡單介面,包含文字方塊輸入帳號密碼、ListBox 顯示使用者清單、新增/刪除/修改按鈕。
private void btnAdd_Click(object sender, EventArgs e)
{
string uname = txtUserName.Text;
string upass = txtPassword.Text;
string sql = string.Format("INSERT INTO users VALUES ('{0}','{1}')", uname, upass);
int result = new ConnDb().Update(sql);
MessageBox.Show(result > 0 ? "新增成功!" : "新增失敗!");
RefreshList();
}
private void btnDelete_Click(object sender, EventArgs e)
{
string uname = lstUsers.Text;
string sql = string.Format("DELETE FROM users WHERE username='{0}'", uname);
int result = new ConnDb().Update(sql);
MessageBox.Show(result > 0 ? "刪除成功!" : "刪除失敗!");
RefreshList();
}
點選 ListBox 項目後開啟修改視窗,載入原資料,確認修改後執行 UPDATE:
// 修改視窗確認按鈕
private void btnConfirm_Click(object sender, EventArgs e)
{
int uid = Convert.ToInt32(txtUid.Text);
string uname = txtUserName.Text;
string upass = txtPassword.Text;
string sql = string.Format("UPDATE users SET username='{0}', userpass='{1}' WHERE uid={2}", uname, upass, uid);
int result = new ConnDb().Update(sql);
MessageBox.Show(result > 0 ? "修改成功!" : "修改失敗!");
if (result > 0) this.Visible = false;
}
每次異動資料後,呼叫 RefreshList() 重新查詢並繫結 ListBox:
public void RefreshList()
{
DataSet ds = new ConnDb().Query("SELECT * FROM users");
lstUsers.DisplayMember = "username";
lstUsers.DataSource = ds.Tables[0];
}
範例使用字串格式化拼接 SQL,實務上極易遭受 SQL Injection 攻擊。建議改用參數化查詢:
string sql = "INSERT INTO users (username, userpass) VALUES (@uname, @upass)";
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@uname", uname);
cmd.Parameters.AddWithValue("@upass", upass);
cmd.ExecuteNonQuery();
}
此外,連線字串應儲存於設定檔,避免硬編碼;生產環境請使用連線池與交易機制確保資料一致性。
本文完整示範了 C# 使用 ADO.NET 進行資料庫連線、查詢與更新的基礎流程。掌握 OleDbConnection、OleDbCommand、ExecuteNonQuery 等核心類別與方法,並搭配 WinForms 介面事件處理,即可快速建立具備 CRUD 功能的桌面應用程式。後續可延伸學習 Entity Framework、Dapper 等 ORM 框架,提升開發效率與程式碼維護性。