C# 分層

三層架構分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)再加上實體類庫(Model)

轉載請注明出自朱朱家園http://blog.csdn.net/zhgl7688

1、實體類庫(Model),主要存放數據庫中的表字段。

操作:

(1)先建立實體類庫Model,打開項目,在解決方案中右鍵--》添加--》新建項目--》選中類庫--》改名Model--》確定

(2)選中Model類庫--》Shift+ALT+C--》建立實體類。UserInfo類

?

?
1
2
3
4
5
6
7
8
namespace Model
{
???public? class UserInfo
????{
????????public string? UserName { get; set; }
????????public string? Password { get; set; }
????}
}


2、數據訪問層(DAL),主要是存放對數據類的訪問,即對數據庫的添加、刪除、修改、更新等基本操作

?

操作:

?

(1)先建立數據訪問層類庫DAL,打開項目,在解決方案中右鍵--》添加--》新建項目--》選中類庫--》改名DAL--》確定

(2)在DAL中添加對Model的引用,選中DAL--》Alt+P+R--》解決方案--》項目--》選中MOdel--》確定

(3)在DAL中添加對system.configuration的引用,選中DAL--》Alt+P+R--》程序集--》框架--》選中System.configuration--》確定

(4)建立數據訪問類,選中DAL--》Shift+ALT+C--》建立數據訪問類。UserDB類

?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Configuration;
using Model;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
????class UserDB
????{
????????private string connString = ConfigurationManager.ConnectionStrings[connString].ToString();
????????public int AddUser(UserInfo userInfo)
????????{
????????????//對數據庫進添加一個用戶操作
????????????string commandText = insert into UserInfo (userName,Password)values(@userName,@Password);
????????????SqlParameter[] paras = new SqlParameter[]
????????????{
???????????new SqlParameter (@userName,userInfo.UserName ),
???????????new SqlParameter (@Password,userInfo.Password )
????????????};
????????????return SqlHelper.ExecuteNonQuery(connString, CommandType.Text, commandText, paras);
????????}
????}
?
1
2
//添加其他對數據庫操作
}

3、業務邏輯層(BLL)對傳送數據進行邏輯判斷分折,并進行傳送正確的值。

?

?

(1)先建立業務邏輯層類庫BLL,打開項目,在解決方案中右鍵--》添加--》新建項目--》選中類庫--》改名BLL--》確定

(2)在BLL中添加對Model、DAL的引用,選中BLL--》Alt+P+R--》解決方案--》項目--》選中MOdel、DAL--》確定

(3)建立業務邏輯類,選中BLL--》Shift+ALT+C--》建立業務邏輯類。LoginManager類

?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using DAL;
using Model;
namespace BLL
{
????public class LoginManager
????{
????????private UserDB userDB = new UserDB();
????????public bool Add(UserInfo userInfo, out string messageStr)
????????{
????????????messageStr = ;//返回界面層添加用戶返回信息
????????????bool isSuccess = false;
????????????if (userInfo.UserName.Trim().Length != 0)//判斷從傳遞來的username是否為空
????????????{
????????????????if (userDB.IsEquals(userInfo))//傳給DALl操作判斷數據庫中是否有重復值
????????????????{
????????????????????userDB.AddUser(userInfo);//傳給DAL操作增加一個新用戶
????????????????????isSuccess = true;
????????????????}
????????????????else
????????????????????messageStr = 有相同的值;
????????????}
????????????else
????????????{
????????????????messageStr = 不能為空;
????????????}
????????????return isSuccess;//返回界面層是否添加成功
????????}
????}
}


5、表現層(UI)即用戶界面層

?

(1)在UI中添加對Model、BLL的引用,選中UI--》Alt+P+R--》解決方案--》項目--》選中MOdel、BLL--》確定

(2)編寫代碼傳遞數據給BLL層。

?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
????UserInfo userInfo;
????LoginManager lm = new LoginManager();
????private void btnAdd_Click(object sender, EventArgs e)
????{
????????userInfo = new UserInfo()
????????{
????????????UserName = txtUserName.Text.Trim(),
????????????Password = txtPassword.Text.Trim()
????????};
????????string messageStr = ;
????????if (lm.Add(userInfo, out? messageStr))
????????{
????????????MessageBox.Show(添加成功);
????????}
????????else
????????{
????????????MessageBox.Show(messageStr);
????????????txtUserName.Focus();
????????}
????}
}

?

?



?

轉載于:https://www.cnblogs.com/shiguanji/p/6661249.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode1177. 構建回文串檢測(前綴和)

給你一個字符串 s,請你對 s 的子串進行檢測。 每次檢測,待檢子串都可以表示為 queries[i] [left, right, k]。我們可以 重新排列 子串 s[left], …, s[right],并從中選擇 最多 k 項替換成任何小寫英文字母。 如果在上述檢測過程中&#xf…

java界面化二叉排序樹_層次序創建二叉樹(圖形界面和控制臺輸入實現)

1 2018.11.72 XT34 /**5 * 功能:構造二叉樹6 * 說明:7 * 1.主函數輸入模式有兩種,BT參數 true 圖形界面,false 控制臺輸入8 * 2.構造樹是按層次遍歷結果輸入的 如:ABCDE*F**GH9 */1011 import javax.swing.*;12 import…

web開發環境_Web開發人員的開發環境

web開發環境With all the tools and programs available, it can be challenging to figure out the best way to set up your development environment on your computer.使用所有可用的工具和程序,尋找在計算機上設置開發環境的最佳方法可能是一項挑戰。 In this…

使用.net Stopwatch class 來分析你的代碼

當我們在調試,優化我們的代碼的時候,想知道某段代碼的真正的執行時間,或者我們懷疑某段代碼,或是某幾段代碼執行比較慢, 需要得到具體的某段代碼的具體執行時間的時候。有一個很好用的類Stopwatch。 Stopwatch 類在 Sy…

Docker 部署 postgresql 與 pgadmin4

Docker快速部署PostgreSQL服務 快速開始 請新建一個目錄postgresql,進入目錄postgresql,將以下文件保存為docker-compose.yml,然后執行docker-compose up version: 3 services:mydb:image: postgres:11volumes:- db-data:/var/lib/postgresql…

leetcode151. 翻轉字符串里的單詞

給定一個字符串&#xff0c;逐個翻轉字符串中的每個單詞。 示例 1&#xff1a; 輸入: “the sky is blue” 輸出: “blue is sky the” 代碼 class Solution {public String reverseWords(String s) {int ns.length(),i0;ArrayList<String> arrayListnew ArrayList<…

java衍生作用_java-如何從AffineTransform衍生的形狀對象中“...

您可以使用AffineTransform.transform(Point2D, Point2D)變換多邊形上的單個點.如果您不使用旋轉變換來移動船,而是將船的位置保持在一個(x,y)位置,那么事情就簡單得多.您可以在move()中移動飛船的位置,而不是嘗試平移多邊形.然后,當您想給船上油漆時,例如做&#xff1a;// Opt…

初學者設計數據庫_面向初學者的完整數據庫設計課程

初學者設計數據庫This database design course will give you a deeper grasp of database design. Caleb Curry teaches the equivalent of an entire college course during this eight hour video.本數據庫設計課程將使您更深入地了解數據庫設計。 在這8個小時的視頻中&…

Qt QTcpSocket使用總結

socket的連接是異步的&#xff0c;所以必須等連接建立完成才能使用&#xff0c;所以分別加入waitForConnected()和waitForBytesWritten()后調試通過1&#xff09;只有使用waitForConnected()后,QTcpSocket才真正嘗試連接服務器&#xff0c;并返回是否連接的結果2&#xff09;避…

[bzoj1303][CQOI2009]中位數圖

來自FallDream的博客&#xff0c;未經允許&#xff0c;請勿轉載&#xff0c;謝謝。 給定一個n個數排列&#xff0c;求有多少段長度為奇數的區間&#xff0c;中位數是b. n<100000 時間限制0.1s 我一開始沒看到排列&#xff0c;想著怎么還能O(n)做的啊&#xff1f;&#xff1f…

falsk 請求沒有返回值報錯

線上報警 5xx 錯誤&#xff0c;查看日志發現報這個錯&#xff0c; TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement. 這個方法沒有有效的返回結果 頁面報這個錯誤 Internal Server Err…

java的iterator接口_java Iterator接口和LIstIterator接口分析_java_腳本之家

java Iterator接口和LIstIterator接口分析目錄1.Iterator接口2.ListIterator3.Iterator和ListIterator的區別正文在繼續看ArrayList源碼之前&#xff0c;先了解Iterator接口和ListIterator接口&#xff0c;下篇文章詳細講解ArrayList是如何實現它們的。我們知道&#xff0c;接…

leetcode468. 驗證IP地址

編寫一個函數來驗證輸入的字符串是否是有效的 IPv4 或 IPv6 地址。 IPv4 地址由十進制數和點來表示&#xff0c;每個地址包含4個十進制數&#xff0c;其范圍為 0 - 255&#xff0c; 用(".")分割。比如&#xff0c;172.16.254.1&#xff1b; 同時&#xff0c;IPv4 地…

播客#45:迪倫·以色列

On todays episode, I interview Dylan Israel. Dylan is a software engineer, a YouTuber, and the creator of several programming courses.在今天的一集中&#xff0c;我采訪了迪倫以色列。 迪倫(Dylan)是一位軟件工程師&#xff0c;一名YouTuber&#xff0c;并且是幾門編…

PHPstorm快捷鍵

當前文件搜索類&#xff1a;ctrln 全文檢索文件&#xff1a;ctrlshiftn 收起側邊欄&#xff1a;alt1&#xff08;自定義&#xff09; 個人學習記錄&#xff0c;持續更新中。。。 轉載于:https://www.cnblogs.com/zaijiang/p/7806260.html

JS基礎_強制類型轉換-Number

https://www.cnblogs.com/ZHOUVIP/p/7225267.html轉載于:https://www.cnblogs.com/robinunix/p/11011188.html

JavaScript變量和作用域

JavaScript有兩種變量&#xff0c;全局變量和局部變量 如果在任何函數定義之外聲明了一個變量&#xff0c;則該變量是全局變量&#xff0c;且該變量的值在整個持續范圍內都可以訪問和修改 如果在函數定義內聲明來了一個變量&#xff0c;則該變量為局部變量。每次執行該函數時都…

python 微信bot_使用Python創建Twitter Bot

python 微信botHave you ever wantd to create a Twitter bot? In this tutorial John G. Fisher shows how to create a bot with Python that tweets images or status updates at a set interval.您是否曾經想創建一個Twitter機器人&#xff1f; 在本教程中&#xff0c;約翰…

leetcode1487. 保證文件名唯一

給你一個長度為 n 的字符串數組 names 。你將會在文件系統中創建 n 個文件夾&#xff1a;在第 i 分鐘&#xff0c;新建名為 names[i] 的文件夾。 由于兩個文件 不能 共享相同的文件名&#xff0c;因此如果新建文件夾使用的文件名已經被占用&#xff0c;系統會以 (k) 的形式為新…

提高redis cluster集群的安全性,增加密碼驗證

節點設置密碼 1、修改配置文件 在配置文件里面增加密碼選項&#xff0c;一定要加上masterauth&#xff0c;不然Redirected的時候會失敗。 masterauth redispassword requirepass redispassword 修改后需要重啟redis節點。 2、動態修改 連接redis節點進行配置設置&#xff0c;然…