日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

三层架构(DAL层Data Access Layer数据库访问层)(16)

發布時間:2023/12/13 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 三层架构(DAL层Data Access Layer数据库访问层)(16) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三層架構即是把數據庫訪問,業務邏輯,界面分離。

三層結構為:

1.表示層(USL - User Show Layer):主要表示WEB方式,也可以表示成WINFORM方式。如果邏輯層相當強大和完善,無論表現層如何定義和更改,邏輯層都能完善地提供服務。

2.業務邏輯層(BLL):主要是針對具體的問題的操作,也可以理解成對數據層的操作,對數據業務邏輯處理。如果說數據層是積木,那邏輯層就是對這些積木的搭建。3.數據訪問層(DAL - Data Access Layer):主要是對原始數據(數據庫或者文本文件等存放數據的形式)的操作層,而不是指原始數據,也就是說,是對數據的操作,而不是數據庫,具體為業務邏輯層或表示層提供數據服務。
ASP.NET MVC Framework是微軟在ASP.NET中所添加的一組類別庫,這組類庫可以使用Model-View-Controller的設計模式來開發ASP.NET的應用程序。
Model:包括數據、驗證規則、數據訪問和業務邏輯等應用程序信息。
View:封裝了應用程序的表示層,是呈現給使用者看的信息。
Controller:包括控制流邏輯,控制信息流和應用程序的執行。接受來自用戶的指令與數據,并將Model與View做整合的控制器,當服務器接到
對ASP.NET MVC應用程序的要求時,服務器(IIS)會先使用UrlRoutingModule(ASP.NET
Routing的HTTP模塊),由它來解析是否有包含ASP.NET
MVC應用程序的URL,若有,則會產生一個MvcRouteHandler對象,這個對象會裝載執行的必要信息,并且會呼叫包含在URL中的
Controller的Execute方法來執行工作。

DAL常用封裝:ToModel,ListAll(對于大數據量的數據不要提供,而是提供條件搜索),GetById,DeleteById,Update,Addnew.

再次使用上一實例的T_Student數據庫。數據庫設計如下:

第一步:新建一個類,命名為StudentDAL.cs將想要得到數據庫數據總條數的方法(GetCount())創建到類中,代碼如下:

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

namespace ExecuteReader執行查詢
{
    class StudentADL
    {
        public static int GetCount()
        {
            return (int)SqlHelper.ExecuteScalar("select count(*) from T_Student");
        }
    }
}

第二步:新建一個窗體:MVC.AXML,并拖動一個按鈕btnADL,并為其添加Click事件,代碼如下:

private void btnADL_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(StudentADL.GetCount().ToString());
        }

第三步:在StudentADL.cs中新建一個方法DeleteById()。代碼如下:

 public static void DeleteById(long id)
        {
            SqlHelper.ExecuteNonQuery("delete from T_Student where Id=@id",new SqlParameter("@id",id));
           
        }

第四步:在MVC.AXML,并拖動一個按鈕btnDel,并為其添加Click事件,代碼如下:

  private void btnDel_Click(object sender, RoutedEventArgs e)
        {
            StudentADL.DeleteById(200);
            MessageBox.Show("成功刪除");
        }

第五步:在MVC.AXML,并拖動一個按鈕btnInsert,并為其添加Click事件,代碼如下:

 private void btnInsert_Click(object sender, RoutedEventArgs e)
        {
            Student student = new Student();
            student.Name = "劉三";
            student.Age = 19;
            student.AiHao = "游泳";
            student.Height = 178;
            student.BirthDay = DateTime.Parse("1998-2-3");
            student.InDate = DateTime.Now;
            StudentADL.Insert(student);
        }

第六步:在StudentADL.cs中新建一個方法Insert(Student student),其中也包括一些其他方法。 代碼如下:

 //public static void Insert(string name,int age,int height,string Aihao DateTime )
        //{如果列比較多則參數就會比較多,要把參數封裝到Model中。所以需要新建一個Student.cs的類
        //    
        //}
        /// <summary>
        /// 如果value==null則返回DBNull.Value,否則返回value
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static object ToDBValue(object value)
        {
            if(value==null)
            { return DBNull.Value;}
            else return value;
        }
        public static void Insert(Student student)
        {
            //object objBirthday;
            //if(student.BirthDay==null)
            //{
            //    objBirthday=DBNull.Value;
            //}
            //else
            //{
            //    objBirthday=student.BirthDay;
            //}
            
           //Height,InDate同理也可以這樣寫,但是仍比較麻煩,現在有比較簡單的方式---就是實現并聲明一個方法ToDBValue
          SqlHelper.ExecuteNonQuery(@"insert into T_Student(Name,Age,Height,AiHao ,BirthDay,InDate)values
             (@Name,@Age,@Height,@AiHao ,@BirthDay,@InDate)", new SqlParameter("@Name",student.Name),
             new SqlParameter("@Age", student.Age), new SqlParameter("@Height", ToDBValue(student.Height)),
             new SqlParameter("@Aihao", student.AiHao),
             //new SqlParameter("@BirthDay", student.BirthDay),
              //new SqlParameter("@BirthDay", objBirthday),沒有使用ToDBValue()方法
              new SqlParameter("@BirthDay", ToDBValue(student.BirthDay)),//使用ToDBValue()方法s
             new SqlParameter("@InDate", ToDBValue(student.InDate)));
        }
第七步:在MVC.AXML,并拖動一個按鈕btnGetById,并為其添加Click事件,代碼如下:
private void btnGetById_Click(object sender, RoutedEventArgs e)
        {
            Student student = StudentADL.GetById(1);
            MessageBox.Show("通過ID="+student.Id+"查詢結果為::"+student.Name+","+student.Age.ToString()+","+student.AiHao+","+student.BirthDay.ToString(),student.InDate.ToString());
        }
第八步:在StudentADL.cs中新建一個方法GetById(long id),其中也包括一些其他方法。 代碼如下:
 /// <summary>
        /// 如果value==DBNull.Value則返回null,否則返回value
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static object FromDBValue(object value)
        {
            if (value == DBNull.Value)
                return null;
            else
                return value;
        }
        //ADL不要返回DataTable、DataRow等ADO.NET類
        public static Student GetById(long id)
        {
            DataTable table = SqlHelper.ExecuteDataTable("select * from T_Student where Id=@id", new SqlParameter("@id", id));
            if (table.Rows.Count<= 0)
            {
                return null;//沒有找到
            }
            else if (table.Rows.Count > 1)
            {
                throw new Exception("ID重復");
            }
            else
            {
                DataRow row = table.Rows[0];
                Student student = new Student();
                student.Id = (long)row["Id"];
                student.Name = (string)row["Name"];
                student.Age = (int)row["Age"];
                student.AiHao = (string)row["AiHao"];
                //if (row["BirthDay"] == DBNull.Value)
                //{ //因為BirthDay可能為空,則無法將DBNull轉換為DateTime類型,所以需要判斷。
                //    student.BirthDay = null;//若數據庫中有N多個這樣可以為空的字符串則需要寫很多比較麻煩,
                //}                           //所以可以創建一個方法,方法名為From DBValue(object value)
                //else
                //{
                //    student.BirthDay = (DateTime)row["BirthDay"];
                //} 
                student.BirthDay = (DateTime?)FromDBValue(row["BirthDay"]);
                student.InDate = (DateTime?)FromDBValue(row["InDate"]);
                student.Height = (Decimal?)FromDBValue(row["Height"]);
                return student;
            }






總結

以上是生活随笔為你收集整理的三层架构(DAL层Data Access Layer数据库访问层)(16)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。