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

DataGridView 實作資料庫 CRUD 完整範例:以 Northwind 為例

     編輯:關於C#

DataGridView 配合 SqlDataAdapter 可快速建立資料庫編輯介面。本文示範針對 Northwind 資料庫 Region 資料表的新增、刪除、修改、查詢完整實作。

環境準備

private const string ConnStr = "server=.;database=northwind;uid=sa;pwd=sa";
private const string SelectSql = "SELECT * FROM region";

private DataSet ds = new DataSet();
private SqlConnection conn;
private SqlDataAdapter da;

載入資料並繫結

private void Form1_Load(object sender, EventArgs e) {
    conn = new SqlConnection(ConnStr);
    da = new SqlDataAdapter(SelectSql, conn);
    da.Fill(ds, "RegionTable");
    dataGridView1.DataSource = ds.Tables["RegionTable"].DefaultView;
}

新增資料

private bool InsertRegion() {
    da.InsertCommand = conn.CreateCommand();
    da.InsertCommand.CommandText = 
        "INSERT INTO region (regionid, regiondescription) VALUES (@id, @desc)";
    da.InsertCommand.Parameters.Add("@id", SqlDbType.Int, 4, "regionid");
    da.InsertCommand.Parameters.Add("@desc", SqlDbType.VarChar, 10, "regiondescription");
    
    return da.Update(ds) > 0;
}

private void btnInsert_Click(object sender, EventArgs e) {
    MessageBox.Show(InsertRegion() ? "新增成功!" : "新增失敗!");
}

刪除資料

private bool DeleteRegion() {
    da.DeleteCommand = conn.CreateCommand();
    da.DeleteCommand.CommandText = "DELETE FROM region WHERE regionid = @id";
    SqlParameter p = da.DeleteCommand.Parameters.Add("@id", SqlDbType.Int, 4, "regionid");
    p.SourceVersion = DataRowVersion.Original; // 關鍵:取得刪除前的原始值
    
    // 刪除目前選取行
    ds.Tables["RegionTable"].Rows[dataGridView1.CurrentRow.Index].Delete();
    return da.Update(ds) > 0;
}

修改資料

private bool UpdateRegion() {
    da.UpdateCommand = conn.CreateCommand();
    da.UpdateCommand.CommandText = 
        "UPDATE region SET regionid=@id, regiondescription=@desc WHERE regionid=@oldId";
    da.UpdateCommand.Parameters.Add("@id", SqlDbType.Int, 4, "regionid");
    da.UpdateCommand.Parameters.Add("@desc", SqlDbType.VarChar, 10, "regiondescription");
    SqlParameter p = da.UpdateCommand.Parameters.Add("@oldId", SqlDbType.Int, 4, "regionid");
    p.SourceVersion = DataRowVersion.Original; // WHERE 條件用原始值
    
    return da.Update(ds) > 0;
}

關鍵技術點總結

操作關鍵屬性/方法注意事項
InsertInsertCommand + Parameters參數名稱對應 DataTable 欄位名
DeleteDeleteCommand + SourceVersion.Original先呼叫 DataRow.Delete() 標記刪除
UpdateUpdateCommand + SourceVersion.OriginalWHERE 條件需用原始值避免主鍵衝突
同步回資料庫da.Update(DataSet)回傳影響行數判斷成敗

進階建議

  • 使用 SqlCommandBuilder 自動產生 CRUD 指令(簡單資料表適用)
  • 加入 RowUpdated 事件處理並發衝突
  • 考慮使用 BindingSource 增強排序、篩選功能
  • 生產環境連線字串應存放於設定檔並加密
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved