• 学员信息录入(StuInfoManager) 用分层实现(既MySchool后的一个案例)


    数据库

    数据表名

    Student

    中文表名

    学员信息表

    字段显示

    字段名

    数据类型

    字段大小

    备注和说明

    编号

    stu_id

    int

    主键,自增1

    学生姓名

    stu_name

    varchar

    50

    不允许空

    学生性别

    stu_sex

    varchar

    2

    学生年龄

    stu_age

    int

    学生邮箱

    stu_email

    varchar

    100

    数据库中的数据如表:

    stu_id

    stu_name

    stu_sex

    stu_age

    stu_email

    1

    张欣

    20

    zhangxin@163.com

    2

    王兰

    21

    wanglan@163.com

    3

    刘亮

    20

    8888888@qq.com

    4

    陈龙

    21

    7777777@qq.com

    由于分层有相互引用关系:分别是:Model实体层不引用任何层,但其他每层都需要引用Model层,UI表示层要引用BLL业务逻辑层,BLL层引用DAL层,UI层不直接引用DAL层,UI层是可以引用DAL层,只是不建议引用,引用的前提是没有BLL层.有Web层,一般个人习惯性从Model层写起,接着写DAL层,再写BLL层,最后写UI层,(也可以倒着写)

    了解了UI的需求后;进入我们分层中:其他界面省略实现功能在代码中体现,主要功能有两块录入数据(添加),和模糊查询,如没有实现该功能给出相应提示:

    Model层:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace StuInfoManager.Model
    {
    
        public class Student
        {
            private int stu_id;
            //编号
            public int Stu_id
            {
                get { return stu_id; }
                set { stu_id = value; }
            }
    
            private string stu_name;
            //学生姓名
            public string Stu_name
            {
                get { return stu_name; }
                set { stu_name = value; }
            }
    
            private string stu_sex;
            //学生性别
            public string Stu_sex
            {
                get { return stu_sex; }
                set { stu_sex = value; }
            }
    
            private int stu_age;
            //学生年龄
            public int Stu_age
            {
                get { return stu_age; }
                set { stu_age = value; }
            }
    
            private string stu_email;
            //学生邮箱
            public string Stu_email
            {
                get { return stu_email; }
                set { stu_email = value; }
            }
        }
    }

    DAL层:

    引入了个SQLHelper类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;
    
    using System.Configuration;
    namespace StuInfoManager.DAL
    {
      public static  class SQLHelper
        {
          //用静态的方法调用的时候不用创建SQLHelper的实例
          //Execetenonquery
         // public static string Constr = "server=HAPPYPIG\SQLMODEL;database=shooltest;uid=sa;pwd=6375196;";
          public static string Constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
          public static int id;
          /// <summary>
          /// 执行NonQuery命令
          /// </summary>
          /// <param name="cmdTxt"></param>
          /// <param name="parames"></param>
          /// <returns></returns>
          public static int ExecuteNonQuery(string cmdTxt, params SqlParameter[] parames)
          {
              return ExecuteNonQuery(cmdTxt, CommandType.Text, parames);
          }
          //可以使用存储过程的ExecuteNonquery
          public static int ExecuteNonQuery(string cmdTxt, CommandType cmdtype, params SqlParameter[] parames)
          {
              //判断脚本是否为空 ,直接返回0
              if (string.IsNullOrEmpty(cmdTxt))
              {
                  return 0;
              }
              using (SqlConnection con = new SqlConnection(Constr))
              {
                  using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
                  {
                      if (parames != null)
                      {
                          cmd.CommandType = cmdtype;
                          cmd.Parameters.AddRange(parames);
                      }
                      con.Open();
                      return cmd.ExecuteNonQuery();
                  }
              }
          }
          public static SqlDataReader ExecuteDataReader(string cmdTxt, params SqlParameter[] parames)
          {
              return ExecuteDataReader(cmdTxt, CommandType.Text, parames);
          }
          //SQLDataReader存储过程方法
          public static SqlDataReader ExecuteDataReader(string cmdTxt, CommandType cmdtype, params SqlParameter[] parames)
          {
              if (string.IsNullOrEmpty(cmdTxt))
              {
                  return null;
              }
              SqlConnection con = new SqlConnection(Constr);
    
              using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
              {
                  cmd.CommandType = cmdtype;
                  if (parames != null)
                  {
                      
                      cmd.Parameters.AddRange(parames);
                  }
                  con.Open();
                  //把reader的行为加进来。当reader释放资源的时候,con也被一块关闭
                  return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
              }
    
          }
          public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parames)
          {
              return ExecuteDataTable(sql, CommandType.Text, parames);
          }
          //调用存储过程的类,关于(ExecuteDataTable)
          public static DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] parames)
          {
              if (string.IsNullOrEmpty(sql))
              {
                  return null;
              }
              DataTable dt = new DataTable();
              using (SqlDataAdapter da = new SqlDataAdapter(sql, Constr))
              {
                  da.SelectCommand.CommandType = cmdType;
                  if (parames != null)
                  {
                      da.SelectCommand.Parameters.AddRange(parames);
                  }
                  da.Fill(dt);
                  return dt;
              }
          }
        
          /// <summary>
          /// ExecuteScalar
          /// </summary>
          /// <param name="cmdTxt">第一个参数,SQLServer语句</param>
          /// <param name="parames">第二个参数,传递0个或者多个参数</param>
          /// <returns></returns>
          public static object ExecuteScalar(string cmdTxt, params SqlParameter[] parames)
          {
              return ExecuteScalar(cmdTxt, CommandType.Text, parames);
          }
          //可使用存储过程的ExecuteScalar
          public static object ExecuteScalar(string cmdTxt, CommandType cmdtype, params SqlParameter[] parames)
          {
              if (string.IsNullOrEmpty(cmdTxt))
              {
                  return null;
              }
              using (SqlConnection con = new SqlConnection(Constr))
              {
                  using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
                  {
                      cmd.CommandType = cmdtype;
                      if (parames != null)
                      {
                          cmd.Parameters.AddRange(parames);
                      }
                      con.Open();
                    return   cmd.ExecuteScalar();
                  }
              }
              
          }
          //调用存储过程的DBHelper类(关于ExeceutScalar,包含事务,只能处理Int类型,返回错误号)
          public static object ExecuteScalar(string cmdTxt, CommandType cmdtype,SqlTransaction sqltran, params SqlParameter[] parames)
          {
               if (string.IsNullOrEmpty(cmdTxt))
              {
                  return 0;
              }
              using (SqlConnection con = new SqlConnection(Constr))
              {
                  int sum = 0;
                  using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
                  {
                      cmd.CommandType=cmdtype;
                      if (parames != null)
                      {
                          cmd.Parameters.AddRange(parames);
                      }
                      con.Open();
                      sqltran = con.BeginTransaction();
                      try
                      {
                          cmd.Transaction = sqltran;
                          sum=Convert.ToInt32( cmd.ExecuteScalar());
                          sqltran.Commit();
                      }
                      catch (SqlException ex)
                      {
                          sqltran.Rollback();
                      }
                      return sum;
                  }
              }
          }
        }
    }

    StudentDAL类:

    using StuInfoManager.Model;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace StuInfoManager.DAL
    {
        public class StudentDAL
        {
            //读取所有学生
            public DataTable SelectStudent()
            {
                string str = "Data Source=.;Initial Catalog=StudentDB;uid=sa";
                SqlConnection con = new SqlConnection(str);
                string sql = "select * from Student";//查询Student
                SqlDataAdapter da = new SqlDataAdapter(sql, con);
                DataSet ds = new DataSet();
                try
                {
    
                    da.Fill(ds, "stuInfo");
                }           
                catch (SqlException e)
                {
                    throw new Exception("数据连接异常!");
                }
    
                catch (Exception)
                {
    
                    throw new Exception("数据转换异常!");
                }
                return ds.Tables["stuInfo"];
            }
    
            public bool AddStudent(Student stu)//添加学生信息
            {
                bool flag = false;//用@XXX,占位,实现添加
                string sql = "insert into Student values(@name,@sex,@age,@email)";
                SqlParameter[] para = {
                                         new SqlParameter("@name",stu.Stu_name),
                                         new SqlParameter("@sex",stu.Stu_sex),
                                         new SqlParameter("@age",stu.Stu_age),
                                         new SqlParameter("@email",stu.Stu_email)                                    
                                     };
                int count = SQLHelper.ExecuteNonQuery(sql, CommandType.Text, para);
                if (count > 0)
                {
                    flag = true;
                }
                return flag;
            }
    
            public DataTable InquiryStudent(Student name)//模糊查询
            {                  
                string sql = "select * from student where stu_name like '%'+@name+'%'";//按姓名查询
                SqlParameter para = new SqlParameter("@name",name.Stu_name);
                DataTable dt = SQLHelper.ExecuteDataTable(sql,para);
                return dt;
                         
            }
            
        }
    }

    BLL层:

    StudentBLL类:

    using StuInfoManager.DAL;
    using StuInfoManager.Model;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace StuInfoManager.BLL
    {
        public class StudentBLL
        {
            StudentDAL studentdal = new StudentDAL();//BLL层引用DAL层
            //读取所有学生
            public DataTable SelectStudent()
            {
                return studentdal.SelectStudent();
            }
            public bool AddStudent(Student stu)//添加学生信息
            {
                return studentdal.AddStudent(stu);
            }
            public DataTable InquiryStudent(Student name)//按姓名查询
            {
                return studentdal.InquiryStudent(name);
            }
        }
    }

    UI层:

    (补充内容App.config)

    App.config是XML文件,

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <!---添加一个特定的节点-->
      <!--//法一:-->
      <connectionStrings>
        <add name="constr" connectionString="Data Source=.;Initial catalog=MySchool;uid=sa"/>
      </connectionStrings>
      <!--//法二;
      <appSettings>
          <add key="constr" value ="Data Source=.;Initial catalog=MySchool;uid=sa"/>
          </appSettings>
      -->  
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup> 
    </configuration>

    App.config中要用到法二,在SQLHelper类中改如下代码,也要选择法二,实现功能一样

    //微软提供了一定的方案,读取App.config中对应节点的内容
            //法一:
            public static string Constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            //法二;
            //public static string Constr = ConfigurationManager.AppSettings["constr"].ToString();
    
            //用静态的方法调用的时候不用创建SQLHelper的实例
            //Execetenonquery
            // public static string Constr = "server=HAPPYPIG\SQLMODEL;database=shooltest;uid=sa;pwd=6375196;";
          //  public static string Constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;

    UI层各个功能块的代码如下:

    using StuInfoManager.BLL;
    using StuInfoManager.Model;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace 学员信息录入
    {
        public partial class StuInfoManager : Form
        {
            public StuInfoManager()
            {
                InitializeComponent();
            }
            StudentBLL studentbll = new StudentBLL();//表示层UI引用业务逻辑层
            private void button1_Click(object sender, EventArgs e)
            {
               
                //判断录入信息是否为空
                if (txtName.Text.Trim()==""||txtAge.Text.Trim()==""||txtEmail.Text.Trim() == "")
                {
                    MessageBox.Show("录入信息不能为空!");
                }
                else
                {
                    Student student = new Student();
                    student.Stu_name = txtName.Text;
                    student.Stu_age = Convert.ToInt32(txtAge.Text);
                    student.Stu_sex = cmbSex.Text;
                    student.Stu_email = txtEmail.Text;
                    bool result = studentbll.AddStudent(student);
                    if (result)
                    {
                        MessageBox.Show("学员信息录入成功!", "操作提示", MessageBoxButtons.OK);
                    }
                    else
                    {
                        MessageBox.Show("学员信息录入失败!", "操作提示", MessageBoxButtons.OK);
                    }
    
                }
    
            }
    
            private void StuInfoManager_Load(object sender, EventArgs e)//主窗体
            {
                cmbSex.SelectedIndex = 0;//下拉框的绑定
                StudentBLL studentbll = new StudentBLL();//表示层UI引用业务逻辑层BLL           
                try
                {
                    DataTable dt = studentbll.SelectStudent();//获取学生的方法
                    dgvList.DataSource = dt;//绑定数据
                }
                catch (Exception ex)
                {
    
                    throw new Exception(ex.Message);
                }
            }
    
            private void butInquiry_Click(object sender, EventArgs e)//查询
            {
                string name = txtNames.Text;
                Student stu = new Student();
                stu.Stu_name = name;
                DataTable result = studentbll.InquiryStudent(stu);
                dgvList.DataSource = result;
                #region 法二(没有用到分层)实现功能一样
                ////1.1  连接字符串
                //string str = "data source=.;initial catalog=StudentDB;uid=sa;";
                ////1.2 创建连接对象    
                //SqlConnection con = new SqlConnection(str);
                //SqlCommand cmd = con.CreateCommand();
                //cmd.CommandText = "select * from student where stu_name like '%'+@name+'%'";
                //cmd.CommandType = CommandType.Text;
                //SqlParameter para = new SqlParameter("@name", txtNames.Text);
                //cmd.Parameters.Add(para);
                //SqlDataAdapter da = new SqlDataAdapter();
                //da.SelectCommand = cmd;
                //DataSet ds = new DataSet();
                //da.Fill(ds, "Info");
                //dgvList.DataSource = ds.Tables["Info"]; 
              
                #endregion
            }
        }
    }

    上述代码属于个人所写,如有转载,需经本人同意,谢谢, 

  • 相关阅读:
    重启服务器后,托盘自启动
    【转】微服务(概念篇):什么是微服务?一篇文章让你彻底搞明白
    发送Http请求调用webService
    sqlserver查询数据库中有多少个表,多少视图,多少存储过程,或其他对象
    CDATA嵌套问题
    Mysql字符串字段判断是否包含某个字符串的3种方法[转载]
    处理jQuery选择器中的特殊符号,如(、#等
    js数组合并(一个数组添加到另一个数组里面)方法
    spring boot web项目在IDEA下热部署解决办法(四步搞定)
    javascript对数组分页
  • 原文地址:https://www.cnblogs.com/WuXuanKun/p/5516282.html
Copyright © 2020-2023  润新知