三层——c#版

2024-08-26 23:18
文章标签 c# .net 三层 netcore

本文主要是介绍三层——c#版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         首先,向大家通知一个好消息——我的三层终于实现了!!!这两天,一直在调一个bug一直链接不上数据库,弄得我死的心都有了。就在昨天,当我把一个“,”改成了“;”后,一切都变的那么的美好。我瞬间感觉,这个世界依旧是彩色的。依然是那么的简单,那么的明亮。

         现在,我把我的c#版的三层实现的过程给大家分享下,希望大家可以多多指点。微笑

         登陆界面:U层

         

         在这里,我设计了一个简单的界面,两个标签,两个文本框,一个按钮。从属性窗口中将文本框的按钮命名为txtUserName和txtPassword(匈牙利命名法,不知道的童鞋可以去查一下哦。)然后将按钮的Name属性改为btnLogin。设计完成后,代码如下:

         

namespace UI
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){
<span style="font-size:18px;">         </span><span style="font-size:18px;">   //定义一个string类型的用户名,用于存放用户输入的用户名</span>
            string userName = txtUsername.Text.Trim();
<span style="font-size:18px;">            //定义一个string类型的密码,用于存放用户输入的密码</span>
            string password = txtpassword.Text.Trim();

<span style="font-size:18px;">            //将得到的数据传入B层。具体方法是:首先,引用B层,然后定义一个引用B层定义的类的实体MGR。</span>
            Login.Bll.LoginService MGR = new Login.Bll.LoginService();
<span style="font-size:18px;">         </span><span style="font-size:18px;">  //应用MGR的userlogin方法(该方法在B层的类中定义,而且该方法需要传入数据userName和Password),得到一个UserInfo类型的返回值(UserInfo的类型在实体层的,实体层不属于三层它定义一些数据类型,用于引用)。</span>
            Login.Model.UserInfo user = MGR.userlogin(userName, password);

<pre name="code" class="csharp">            
            //登陆成功后的一个提示
MessageBox.Show("登陆成功" + user.userName); } }}

 
         在这个窗体中,并没有任何的数据判断,只是把该显示给用户的界面向用户展示,然后接受用户的输入,对用户的操作进行采集。 

         逻辑运算层:B层

         B层的职责就是对数据进行逻辑的运算。登陆中只有一个判断,所以B曾的代码也不多。

         

namespace Login.Bll
{
    //定义loginservice类public class LoginService{
        //定义loginservice类的userlogin方法,该方法返回UserInfo类型的数据public Login.Model .UserInfo  userlogin(string userName, string password){//调用D层的UserDao类,生成实例uDaoLogin.DAL .UserDAO  uDao = new Login.DAL.UserDAO();
            //调用uDao的selectUser方法,得到一个user类型的返回值。Login.Model.UserInfo user = uDao.SelectUser(userName, password);
            
            //这里的user是来源于D层查询结束后的返回值。(如果查到该数据,就返回user,如果没有查到数据,则返回null)    
            //判断是否登陆成功,如果成功则返回一个用户的信息,如果失败,则返回一个例外信息。if (user != null){return user;}else{ throw new Exception("登陆失败");}}}
}

         数据链接层:D层

         D层的作用是链接数据库,所有与数据库直接交互的操作都在D层。在登陆的例子中D层有两个类,第一个负责的是与D层的链接字符串的存储,第二个类负责的是将数据库与D层建立链接,并通过sql语句对数据库进行一些操作。并将得到的结果反馈给B层。

namespace Login.DAL
{
   //建立一个类用于存放链接字符串
   class DBUtil
{
public static string ConString = @"server=.(数据库名称);Database=login;Uid=sa;Pwd=你的数据库密码";
}
   //建立UserDAO类public  class UserDAO{
       //定义selectUser类,这个类的作用是从数据库中取出来user的基本信息,并将信息返回B层。public Login.Model .UserInfo  SelectUser(string userName, string password){
           //初始化conn。(建立实例,并且将DBUtil的constring值赋予它)using (SqlConnection conn  = new SqlConnection(DBUtil.ConString)) {
               //利用conn的链接建立一个command,它的作用是可以存储sql语句SqlCommand cmd = conn.CreateCommand();cmd.CommandText = @"SELECT ID ,username,password FROM Users WHERE username=@UserName ";cmd.CommandType = CommandType.Text;cmd.Parameters .Add (new SqlParameter ("@UserName",userName));cmd.Parameters .Add (new SqlParameter ("@Password",password));
//打开conn数据链接,并且执行command中的命令conn.Open();
               //从数据库中读取数据SqlDataReader  reader = cmd.ExecuteReader();Login.Model.UserInfo user = null;//将读取的数据赋值给userwhile (reader.Read ()){if (user == null){user = new Login.Model.UserInfo();}user.ID =reader.GetInt32(0);user.userName = reader.GetString(1);user.passWord = reader.GetString(2);}
               //将得到的结果返回给B层return user;}}}
}
          至此,我们的三层的代码的实现就完成了。感觉还算明了。期待进一步的提高。        











这篇关于三层——c#版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109962

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元