首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# Access 醫院掛號系統:繳費界面「合計藥費」按鈕邏輯實現

     編輯:程式設計綜合問答

需求

DataGridView 顯示處方明細,點擊「合計藥費」按鈕自動統計金額並寫入 Access。

核心代碼

private void btnTotalDrugCost_Click(object sender, EventArgs e) {
    decimal total = 0m;
    foreach (DataGridViewRow row in dgvPrescription.Rows) {
        if (row.IsNewRow) continue; // 跳過新行佔位
        var cell = row.Cells["DrugCost"]; // 假設列名為 DrugCost
        if (cell.Value != null && decimal.TryParse(cell.Value.ToString(), out decimal cost)) {
            total += cost;
        }
    }
    txtTotalDrugCost.Text = total.ToString("F2");

    // 寫入 Access(參數化防注入)
    using (var conn = new OleDbConnection(connStr))
    using (var cmd = new OleDbCommand(
        "UPDATE Registration SET TotalDrugCost = ? WHERE RegID = ?", conn)) {
        cmd.Parameters.AddWithValue("@Cost", total);
        cmd.Parameters.AddWithValue("@RegID", currentRegID);
        conn.Open();
        cmd.ExecuteNonQuery();
    }
}

關鍵點

  1. 遍歷 DataGridView.Rows 而非 DataSource,獲取用戶編輯後的最新值
  2. 跳過 IsNewRow 避免統計空白行
  3. decimal 貨幣運算 避免 double 精度丟失
  4. 參數化 SQL 防注入,自動處理類型轉換
  5. using 確保連接釋放

Access 特有注意事項

  • 字段類型建議 Currency(8 字節定點數),而非 Single/Double
  • 連接字串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Hospital.accdb;Persist Security Info=False
  • 若報「語法錯誤」,檢查列名是否為保留字(如 Date, Number),用 [DrugCost] 括起
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved