天天看點

asp.net三層結構

新人并無實際工作經驗

部落格記錄自己成長與知識歸類  友善自己 當然或許能友善他人

另外 ,一些不對的地方歡迎指教

1.三層結構

asp.net三層結構

1.1

如圖所示,有四個類庫
第一個與項目名相同的是UI層  說白了就是一些眼睛能看到的  比如網頁一些表面看到的東西
第二個BLL邏輯層  一些可以複用的邏輯處理什麼的  實際作用我也不太明白 沒工作經驗一些小Demo基本用不上      
個人感覺是放一些經常用得到的方法 好像還有點安全性的意思
第三個DAL資料通路層  字面意思   連接配接資料庫 操作資料庫的方法的封裝  友善調用  直接複用節省時間
第四個Model  模型層  和資料庫裡的表差不多      
實際UI BLL DAL才是三層結構  Model這個可以忽略 但是卻不得不重視他的存在 實際掌握了就知道為什麼那麼特殊了  VS2005好像沒什麼作用 一樣麻煩  目前已知2010以上用着特别舒服~比如      
Test tt = new Test()
{
//指派操作 比如
testId=textbox1.text,
testPwd=textbox1.text
};
           
不過這裡還會利用實體類進行一些資料傳輸   也可以根據需求加一些字段  一般實際項目都不怎麼手寫的  不過手寫也有好處 很多東西都是無意看到然後寫的時候想起來 之後受益終生  是以沒什麼事還是盡量手寫吧      

2.三層結構之間的調用方法

根據1.1圖  類庫的添加順序是最先添加Model  首先建立一個asp.net項目  再分别添加Model  DAL  BLL為字尾的類庫(注意别搞錯了  是類庫  建立那顯示的隻有類庫兩個字..别搞成項目了) 下面正文了...

asp.net三層結構

右鍵引用-添加引用   按照數字順序操作  其他的都是這種方式

引用順序是:Model<DAL<BLL<UI DAL引用Model BLL引用DAL和Model UI根據需要引用吧  一般來說是引用Model和BLL

2.1 DBHelper輔助類(個人習慣寫法 新手建議使用微軟通用的輔助類)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//手動導入
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace MyWebProjectDAL
{
    public static class DBHelper
    {
        /// <summary>
        /// 資料庫連接配接配置檔案
        /// </summary>
        public static readonly string strCon = ConfigurationManager.ConnectionStrings["MySchool"].ConnectionString;
        ///public static readonly string strCon = "字元串";
        /// <summary>
        /// 打開資料庫連接配接
        /// </summary>
        public static SqlConnection Conn
        {
            get
            {
                SqlConnection conn = new SqlConnection(strCon);
                conn.Open();
                return conn;
            }
        }

        public static int GetExecuteNonQuery(string sql)
        {
            return GetExecuteNonQuery(sql,CommandType.Text,null);
        }
        public static int GetExecuteNonQuery(string sql, SqlParameter[] sps)
        {
            return GetExecuteNonQuery(sql,CommandType.Text, sps);
        }
        /// <summary>
        /// 增,删,改
        /// </summary>
        /// <param name="sql">查詢語句</param>
        /// <param name="comType">存儲過程</param>
        /// <param name="sps">參數</param>
        /// <returns>受影響行數</returns>
        public static int GetExecuteNonQuery(string sql, CommandType comType, SqlParameter[] sps)
        {
            using (SqlConnection conn = Conn)
            {
                SqlCommand comm = new SqlCommand(sql, conn);
                comm.CommandType = comType;
                if (sps != null)
                {
                    comm.Parameters.AddRange(sps);
                }
                return comm.ExecuteNonQuery();
            }
        }
        public static object GetExecuteScalar(string sql)
        {
            return GetExecuteScalar(sql,CommandType.Text,null);
        }
        public static object GetExecuteScalar(string sql, SqlParameter[] sps)
        {
            return GetExecuteScalar(sql,CommandType.Text,sps);
        }
        /// <summary>
        /// 統計單行單列值
        /// </summary>
        /// <param name="sql">查詢語句</param>
        /// <param name="comType">存儲過程</param>
        /// <param name="sps">參數</param>
        /// <returns>單行單列值</returns>
        public static object GetExecuteScalar(string sql, CommandType comType, SqlParameter[] sps)
        {
            using (SqlConnection conn = Conn)
            {
                SqlCommand comm = new SqlCommand(sql, conn);
                comm.CommandType = comType;
                if (sps != null)
                {
                    comm.Parameters.AddRange(sps);
                }
                return comm.ExecuteScalar();
            }
        }
        public static SqlDataReader GetExecuteReader(string sql)
        {
            return GetExecuteReader(sql,CommandType.Text,null);
        }
        public static SqlDataReader GetExecuteReader(string sql, SqlParameter[] sps)
        {
            return GetExecuteReader(sql, CommandType.Text, sps);
        }
        /// <summary>
        /// 讀取資料集
        /// </summary>
        /// <param name="sql">查詢語句</param>
        /// <param name="comType">存儲過程</param>
        /// <param name="sps">參數</param>
        /// <returns>資料表集合</returns>
        public static SqlDataReader GetExecuteReader(string sql, CommandType comType, SqlParameter[] sps)
        {
            SqlConnection conn = Conn;
            try
            {
                SqlCommand comm = new SqlCommand(sql, conn);
                comm.CommandType = comType;
                if (sps != null)
                {
                    comm.Parameters.AddRange(sps);
                }
                return comm.ExecuteReader();
                //此屬性用于自動關閉讀取器,開啟可能導緻某些異常
                //return comm.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
           

2.2 模型層

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyWebProjectModel
{
    public class Grade
    {
        public string GradeId { get; set; }
        public string GradeName { get; set; }
    }
}
           

2.3 資料通路層

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using MyWebProjectModel;

namespace MyWebProjectDAL
{
    public class GradeServices
    {
        public string GetGradeById(int Id)
        {
            string sql = "select GradeName from Grade where Gradeid=" + Id;
            return Convert.ToString(DBHelper.GetExecuteScalar(sql));
        }
    }
}
           

2.4 邏輯處理層

namespace MyWebProjectBLL
{
    public class GradeManager
    {
        GradeServices gs = new GradeServices();
        public string GetGradeById(int Id)
        {
            return gs.GetGradeById(Id);
        }
    }
}
           

UI層調用這裡就不上代碼了  全局執行個體化BLL裡的類  然後執行個體名.方法名就出來了 根據對象資料源類型選擇相應的方法

最後到這裡  強烈建議新手在一般情況下不要使用中文!(我覺得應該是..項目名、類庫名、類名、檔案夾名、控件ID、 資料庫表、字段)

檔案不知道怎麼上傳...是以外鍊啦: 三層結構執行個體

繼續閱讀