iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
Software Development

ASP.NET MVC基礎修練:從菜開始系列 第 20

Day-20 ASP.NET MVC 之 三層式架構2

  • 分享至 

  • xImage
  •  

接下來建立各階層的程式

BLL 邏輯層

先新增一個class取名叫 UsersManager.cs
https://ithelp.ithome.com.tw/upload/images/20231005/20106640QnWTVFQjbN.jpg

程式碼如下

記得要 引入這兩個
using DAL;
using Models;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using Models;
using System.Web;

namespace BLL
{
    public class UsersManager
    {
        private UsersService objUsersService = new UsersService();

        public Users UsersLogin(Users objUsers)
        {
            objUsers = objUsersService.UsersLogin(objUsers);
            if (objUsers != null)
            {
               
                HttpContext.Current.Session["CurrentUsers"] = objUsers;
            }
            return objUsers;
        }
    }
}

程式說明如下

類定義:

public class UsersManager 定義了一個名為 UsersManager 的公共類。
在面向物件的程式設計中,類是一種自定義資料型別,它包含屬性(成員變量)和方法(成員函式)。

私有成員:

private UsersService objUsersService = new UsersService();
這是一個私有成員變量,其型別為 UsersService。私有成員變量只能在類的內部存取。
這裡,objUsersService 物件被初始化為新的 UsersService 實例。

公用方法:

public Users UsersLogin(Users objUsers) 定義了一個公用方法,名為 UsersLogin。
這個方法接受一個型別為 Users 的參數 objUsers,並返回一個型別為 Users 的物件。

方法:

在 UsersLogin 方法中,首先呼叫 objUsersService.UsersLogin(objUsers),
將輸入的 objUsers 物件傳遞給 UsersService 類的 UsersLogin 方法進行處理。結果值回至 objUsers。

Session管理:

如果 objUsers 不為 null(即登錄成功),則將 objUsers 物件存儲在 HTTP 上下文的資訊中,
通過 HttpContext.Current.Session["CurrentUsers"] = objUsers;。
這樣,可以存取存儲在中的當前登錄用戶的資訊。

返回值:

最後,方法返回 objUsers 物件。如果登錄成功,這將是一個有效的 Users 物件,
包含登錄用戶的資訊。如果登錄失敗,這將是 null。
這個類主要用於處理用戶登錄邏輯。它通過與 UsersService 類互動來驗證用戶憑證,並在驗證成功後將用戶資訊儲存,以便後續存取。

再建立一個 cs 取名 UsersService.cs

https://ithelp.ithome.com.tw/upload/images/20231005/20106640JhTYucaUxN.jpg

程式碼如下

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

namespace DAL
{
    public class UsersService
    {
       
        public Users UsersLogin(Users objUsers)
        {
            string sql = "select UserName from Users where LoginId='{0}' and Pwd='{1}'";
            sql = string.Format(sql, objUsers.LoginId, objUsers.Pwd);
            try
            {
                SqlDataReader objReader = SQLHelper.GetReader(sql);
                if (objReader.Read())
                {
                    objUsers.UserName = objReader["UserName"].ToString();
                    objReader.Close();
                }
                else
                {
                    objUsers = null;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("應用程序和資料庫連接出現問題!" + ex.Message);
            }
            return objUsers;
        }
    }
}

程式說明如下

UsersService
是一個包含UsersLogin方法的公用類,
該方法接受一個Users物件作為參數,
並傳回一個Users物件。
在方法內部,首先建構了一個SQL查詢字串,
該字串用於從資料庫中檢索與給定登入ID和密碼相符的使用者名稱。
然後,呼叫SQLHelper類別的GetReader方法執行查詢,並傳回一個SqlDataReader物件。
如果查詢傳回結果,則將結果中的使用者名稱賦值給輸入參數objUsers的UserName屬性,並關閉SqlDataReader物件。
否則,將objUsers設定為null。 如果在執行查詢過程中發生異常,則捕獲異常並拋出一個新的異常,其中包含有關應用程式和資料庫連接問題的訊息。最後,傳回objUsers物件。

新增一個 CS 叫 SQLHelper.cs 先放在 Helper 的資料夾中
https://ithelp.ithome.com.tw/upload/images/20231005/20106640bS0jaGvZck.jpg
程式碼如下


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


namespace DAL
{
   
    class SQLHelper
    {
        private static readonly string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();

           
        public static object GetSingleResult(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
      
        public static SqlDataReader GetReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                conn.Close();
                throw ex;
            }
        }
    }
}

程式碼說明如下
這個程式碼定義了一個名為 SQLHelper 的靜態類,
它包含了兩個用於與 SQL Server 資料庫操作的方法:GetSingleResult 和 GetReader。
GetSingleResult 方法接受一個 SQL 查詢作為輸入,然後打開一個資料庫連接,執行查詢,並返回查詢結果的第一行第一列的值。如果發生異常,它將拋出異常。在方法的最後,它將關閉資料庫連接。
GetReader 方法也接受一個 SQL 查詢作為輸入,然後打開一個資料庫連接,執行查詢,並返回一個 SqlDataReader 物件,用於讀取查詢結果的多行多列值。如果發生異常,它將先關閉資料庫連接,然後拋出異常。
這個程式碼使用了 System.Data.SqlClient 名稱空間中的 SqlConnection 和 SqlCommand 類別,用於建立和管理資料庫連接和查詢。它也使用了 System.Configuration 名稱空間中的 ConfigurationManager 類別,用於讀取連接字串配置。


上一篇
Day-19 ASP.NET MVC 之 三層式架構
下一篇
Day-21 ASP.NET MVC 之 三層式架構3
系列文
ASP.NET MVC基礎修練:從菜開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言