C#+SQL Sever三层架构理解

样例完整代码

一、管理员管理模块

1、创建BLL层、DAL层、UI层、Model层

2、数据查询

(1)在UI层的app.config文件中添加连接数据库的字符串

	<connectionStrings>
		<add name="constr" connectionString="Server=.;
            Database=Res_Manage;User Id=sa;Password=1234;" 
            providerName="System.Data.SqlClient"/>
	</connectionStrings>

(2)在DAL层创建SQLHepler类

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

namespace Res_Man_DAL
{
    internal class SQLHelper
    {
        private static string conStr =  
             ConfigurationManager.ConnectionStrings["constr"].ConnectionString;


        //查询数据
        public static DataTable ExecuteDataTable(string sql,params SqlParameter[] parameters )
        {
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection( conStr ))
            {
                //conn.Open();
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                adapter.SelectCommand.Parameters.AddRange( parameters );
                adapter.Fill(dt);
            }
            return dt;
        }
        
    }
}

(3)在DAL层创建ManagerInfoDAL类

        需要一个方法 调用sqlHepler获取 dataTable,将dataTable中的数据转化成对象

using Res_Man_Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Res_Man_DAL
{
    public class ManagerInfoDAL
    {
        //需要一个方法 调用sqlHepler获取 dataTable
        //将dataTable中的数据转化成对象

        public List<ManagerInfo> GetManager()
        {
            string sql = "select * from ManagerInfo";
            //创建一个空对象集合
            List<ManagerInfo> list = new List<ManagerInfo>();
            //调用sqlHepler获取dataTable
            DataTable dt = SQLHelper.ExecuteDataTable(sql);
            //把DataTable转换成模型实体(表->对象)
            foreach (DataRow dr in dt.Rows)
            {  

                list.Add(new ManagerInfo()
                {
                    MId = Convert.ToInt32(dr["MId"]),
                    MName = dr["MName"].ToString(),
                    MPwd = dr["MPwd"].ToString(),
                    MType = Convert.ToInt32(dr["MType"])
                });
            }
            return list;
        }
    }   
}

(4)在Model层创建对应的对象类ManagerInfo类

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

namespace Res_Man_Model
{
    public class ManagerInfo
    {
        public int MId {  get; set; }
        public string MName { get; set; }
        public string MPwd { get; set; }
        public int MType {  get; set; } 
    }
}

(5)在BLL层创建ManagerInfoBLL类

创建方法供UI层访问数据

using Res_Man_DAL;
using Res_Man_Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLL
{
    public class ManagerInfoBLL
    {
        public List<ManagerInfo> GetManagers() 
        { 
            ManagerInfoDAL managerInfoDAL = new ManagerInfoDAL();

            return managerInfoDAL.GetManager(); 
        }

    }
}

(6)在UI层的主界面创建Form1_load()方法

获取从BLL层传递过来的数据

using Res_Man_Model;
using BLL;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RestaurantManagerment
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Form1_load();
        }

        private void Form1_load()
        {
            //获取从BLL层传递过来的数据
            ManagerInfoBLL managerInfoBLL = new ManagerInfoBLL();
            List<ManagerInfo> managerInfos = managerInfoBLL.GetManagers();
            dgv_load.DataSource = managerInfos;
        }
    }
}

(7)查询展示

3、搭建UI

(1)设置dataGridView的列

修改数据源和显示文字。

(2)设置禁用自动生成列、自适应宽度

在UI层的Form1_load方法中添加:禁用dataGridView自动生成列,自适应宽度。

private void Form1_load()
{
    //把自动生成列设置为false
    dgv_load.AutoGenerateColumns = false;
    //自动适应表宽度
    dgv_load.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
   //获取从BLL层传递过来的数据
   ManagerInfoBLL managerInfoBLL = new ManagerInfoBLL();
    List<ManagerInfo> managerInfos = managerInfoBLL.GetManagers();
    dgv_load.DataSource = managerInfos;
}

(3)添加对应组件,设计UI   

添加两个groupbox,以及内部其余小组件

4、添加数据

(1)将managerInfoBLL设为全局变量

ManagerInfoBLL managerInfoBLL = new ManagerInfoBLL();

Form1:放到Form1_load()方法外。

BLL层中的ManagerInfoDAL也设为全局变量。

UI层中的Form1的ManagerInfoBLL也设为全局变量。

(2)UI层设置添加按钮事件

为了方便操作后自动刷新,将查询进行封装。

public void InitalData()
{
    List<ManagerInfo> managerInfos = managerInfoBLL.GetManagers();
    dgv_load.DataSource = managerInfos;
}

 添加点击事件

private void btn_add_Click(object sender, EventArgs e)
{
    //添加数据
    string MName = tb_UserName.Text.Trim();
    string MPwd = tb_UserPwd.Text.Trim();
    int MType = rbtn_jingli.Checked ? 1 : 0;
    //构建对象
    ManagerInfo addManagerInfo = new ManagerInfo()
    {
        MName = MName,
        MPwd = MPwd,
        MType = MType,
    };
    managerInfoBLL.Insert(addManagerInfo);
}

(3)在BLL层调用Insert插入函数

public bool Insert(ManagerInfo managerInfo)
{
    //调用DAL层对象,进行数据库插入  
    return managerInfoDAL.Insert(managerInfo)>0;
}

(4)ManagerInfoDAL中实现Insert插入函数

public int Insert(ManagerInfo managerInfo)
{
    string sql = "insert into ManagerInfo(MName,MPwd,MType) values(@MName,@MPwd,@MType)";

    //构建参数
    SqlParameter[] sqlParameters = new SqlParameter[]
    {
            new SqlParameter("@MName",managerInfo.MName),
            new SqlParameter("@MPwd",managerInfo.MPwd),
            new SqlParameter("@MType",managerInfo.MType)

    };
    int r = -1;
    r = SQLHelper.ExecuteNonQuery(sql, sqlParameters);
    return r;
} 

(5)SqlHelper中添加函数实现查找和修改语句sql执行

 public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters )
 {
     int r = -1;
     using (SqlConnection conn = new SqlConnection(conStr))
     {
         using (SqlCommand cmd = new SqlCommand(sql, conn))
         {
             //添加参数
             cmd.Parameters.AddRange ( parameters );
             //打开链接
             conn.Open();
             r = cmd.ExecuteNonQuery();
         }
     }
     return r;
 }

5、修改数据

(1)UI层

From1:

private void btn_update_Click(object sender, EventArgs e)
{
    //获取想修改的id
    int mid =Convert.ToInt32 (dgv_load.SelectedRows[0].Cells[0].Value);
    //拿到要修改的数据
    string MName = tb_UserName.Text.Trim();
    string MPwd = tb_UserPwd.Text.Trim();
    int MType = rbtn_jingli.Checked ? 1 : 0;
    //构建对象
    ManagerInfo mi = new ManagerInfo()
    {
        MId = mid,
        MName = MName,
        MPwd = MPwd,
        MType = MType,
    };

    //对象传递给BLL
    bool b = managerInfoBLL.UpdateManagerInfo(mi);

    if (b)
    {
        MessageBox.Show("修改成功");
    }
    else
    {
        MessageBox.Show("修改失败");
    }
    InitalData();
}

(2)BLL层

ManagerInfoBLL:

public bool UpdateManagerInfo(ManagerInfo mi)
{
    return managerInfoDAL.UpdateManagerInfo(mi)>0;
}

(3)DAL层的ManagerInfoDAL

ManagerInfoDAL:

public int UpdateManagerInfo(ManagerInfo mi)
{
    int r = -1;
    //准备sql
    string sql = "update ManagerInfo set MName=@MName,MPwd=@MPwd,MType=@MType where MId=@MId";
    //准备参数
    SqlParameter[] sqlParameters = new SqlParameter[]
   {
            new SqlParameter("@MName",mi.MName),
            new SqlParameter("@MPwd",mi.MPwd),
            new SqlParameter("@MType",mi.MType),
            new SqlParameter("@MId",mi.MId)

   };
    //执行sqlhelper
    r = SQLHelper.ExecuteNonQuery(sql, sqlParameters);
    //返回结果
    return r;
}

(4)效果图

(5)后续实现:点击选中dataGridView1某一行,在旁边的textbox里显示选中行的名字等属性信息

6、删除数据

(1)DAL层实现

ManagerDAL:

//删除数据
public int DeleteManagerInfo(int id)
{
    string sql = "delete from  ManagerInfo  where MId=" + id;
    return SQLHelper.ExecuteNonQuery(sql);
}

(2)BLL层

ManagerInfoBLL:

public bool DeleteManagerInfo(int id)
{
    return managerInfoDAL.DeleteManagerInfo(id)>0  ;
}

(3)UI层

Form1:

 private void btn_delete_Click(object sender, EventArgs e)
 {
     //获取想修改的id
     int mid = Convert.ToInt32(dgv_load.SelectedRows[0].Cells["编号"].Value);
     bool b = managerInfoBLL.DeleteManagerInfo(mid);
     if (b)
     {
         MessageBox.Show("删除成功");
         
     }
     else
     {
         MessageBox.Show("删除失败");
     }
     InitalData();
 }

(4)效果图

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python SQL Sever教务管理系统数据库是一种基于Python语言与SQL Server数据库相结合的教务管理系统。它与传统的教务管理系统相比,在数据操作和处理方面更加高效、灵活、精准,同时也具有更好的用户体验。此系统的设计初衷是提高教务和学籍管理的自动化程度,实现教育信息化的目标。 Python是一种简单易学、高效实用、广泛应用于各种领域的编程语言,具有较强的扩展性和丰富的第三方库资源。而SQL Server是微软公司发行的关系型数据库管理系统,具有高效稳定、安全可靠、易于维护与管理等优点。使用这两个工具相结合的方案开发教务管理系统,可有效地解决学校教务管理中的一系列问题。 教务管理系统的数据库需要满足多个需求,如学籍管理、课程表设置、课程成绩查询等。Python SQL Sever教务管理系统数据库在满足这些基本需求的前提下,还具有很好的扩展性和灵活性,便于根据学校的实际需求进行二次开发和定制化。 研发Python SQL Sever教务管理系统数据库需要专业知识和丰富经验,同时,为了确保系统的安全性和稳定性,需要采用合适的数据加密和备份策略。只有客观评估和合理选用各种技术手段,才能实现数据库管理的高效性、可靠性和安全性。 ### 回答2: Python SQL Server教务管理系统数据库是一种结合了Python程序语言和Microsoft SQL Server数据库管理系统的教务管理系统。此系统可以帮助学校或教育机构管理课程、学生、教职工等信息。Python是一种高级编程语言,具有简单易学和开源免费的特点,可以实现对数据库的高效管理和数据分析。Microsoft SQL Server是一种强大的关系型数据库管理系统,具有稳定性高、扩展性好等特点,在企业中被广泛应用。 教务管理系统的数据库包含多个重要模块,例如:学生管理、课程管理、成绩管理、教职工管理等。每个模块都需要建立相应的数据库表,记录相关信息。在使用Python连接SQL Server数据库时,可以使用pyodbc或sqlalchemy等库进行数据的读取、写入和修改。此外,Python还可以运用pandas、numpy等库实现数据的处理和分析,为学校决策提供有效的支持。 在教务管理系统中,学生信息的管理包括学生基本信息、入学信息、课程成绩、奖惩情况等。课程管理则包含了课程基本信息、课程表管理、选课管理等。成绩管理则需要对学生的成绩进行管理和统计分析,并生成相应的报表。而教职工管理则包括了教师管理、职工管理、薪酬管理等。Python SQL Server教务管理系统数据库在这些方面可以提供系统化的解决方案,并方便教育机构进行数据查询、管理和分析,从而使得教务管理工作更加高效、快捷和精准。 ### 回答3: Python SQL Server 教务管理系统数据库,是一个基于 Python 编程语言和 SQL Server 数据库技术开发的教务管理系统。它主要面向学校和教育机构,提供了完整的学生信息管理、课程安排、成绩管理、教师管理等功能。 Python 是一种高级编程语言,具有易读、易学、易维护等特点,被广泛应用于 Web 开发、数据分析、人工智能等领域。SQL Server 是一种强大的关系型数据库管理系统,能够提供快速、安全、可靠的数据存储和管理。 Python SQL Server 教务管理系统数据库采用了这两种技术,能够提供快速高效的教务管理服务。它基于 Web 技术,能够通过浏览器进行访问,支持多用户同时在线管理。 该系统实现了学生信息管理,包括学生基本信息、选课信息、成绩管理等;课程安排管理,包括课程设置、排课、教室管理等;教师管理,包括教师基本信息、授课任务、考试监考等。 本系统利用 Python 在数据库编程上的优势,可以使用 Pyodbc 这样的工具来连接 SQL Server 数据库,使用 SQLAlchemy 这样的工具来处理 SQL 语句,以及使用 Django 这样的开发框架来增加系统的可扩展性和稳定性。同时,SQL Server 作为数据库也能够保证数据安全性和系统的性能。 Python SQL Server 教务管理系统数据库是一个高效实用的教务管理系统,能够帮助学校和教育机构有效地管理学生信息和教学资源,提高教学质量和管理效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流离川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值