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

C# 三層架構實作:資料存取層 (DAL) 完整程式碼範例 (第 4 部分)

     編輯:關於C語言

DAL 職責

封裝資料庫操作細節 (連線字串、SQL 組裝、參數化),提供 Add、Update、Find 等方法供 BLL 呼叫,完全隱藏資料庫結構。

完整 DACustomer 類別

using System;
using System.Data.OleDb;
using System.Data;

namespace _3TierArchitecture
{
    public class DACustomer
    {
        private OleDbConnection cnn;
        private const string CnnStr = 
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\...\\customer.mdb;";

        private const string Table = "tblCustomer";
        private const string ColID = "CUS_ID", ColLName = "CUS_L_NAME", 
            ColFName = "CUS_F_NAME", ColTel = "CUS_TEL", ColAddr = "CUS_ADDRESS";

        public DACustomer() { }
        public DACustomer(BOCustomer cus) { /* 保留 BLL 參考 */ }

        public void Add(BOCustomer cus)
        {
            string sql = BuildInsertSql(cus);
            OpenCnn();
            new OleDbCommand(sql, cnn).ExecuteNonQuery();
            CloseCnn();
        }

        public void Update(BOCustomer cus)
        {
            string sql = $@"UPDATE {Table} SET 
                {ColLName}='{cus.LName}', {ColFName}='{cus.FName}',
                {ColAddr}='{cus.Address}', {ColTel}='{cus.Tel}'
                WHERE {ColID}='{cus.cusID}'";
            OpenCnn();
            new OleDbCommand(sql, cnn).ExecuteNonQuery();
            CloseCnn();
        }

        public DataSet Find(string id)
        {
            DataSet ds = null;
            try
            {
                OpenCnn();
                string sql = $"SELECT * FROM {Table} WHERE {ColID}='{id}'";
                OleDbDataAdapter da = new OleDbDataAdapter(sql, cnn);
                ds = new DataSet();
                da.Fill(ds, Table);
            }
            catch (Exception ex) { /* 記錄錯誤 */ }
            finally { CloseCnn(); }
            return ds;
        }

        private void OpenCnn() { cnn = new OleDbConnection(CnnStr); cnn.Open(); }
        private void CloseCnn() { cnn.Close(); }

        private string BuildInsertSql(BOCustomer cus)
        {
            return $@"INSERT INTO {Table} ({ColID},{ColLName},{ColFName},{ColAddr},{ColTel})
                VALUES ('{cus.cusID}','{cus.LName}','{cus.FName}','{cus.Address}','{cus.Tel}')";
        }
    }
}

改進重點 (現代實務)

  • 參數化查詢:防止 SQL Injection,使用 OleDbParameter。
  • 連線池與 using:using (var cnn = new OleDbConnection(...)) 確保釋放。
  • OR Mapper:實務上建議採用 Dapper/EF Core 取代手寫 DAL。
  • 設定外部化:連線字串放入 app.config/appsettings.json。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved