C# 利用反射获取类的字段与值,模块化插入数据库

1.MVC

  • MVC

应用开发:

MVC :模型 - 视图 - 控制器

MVC 标准规范,程序要遵守的,通用模型。

模型:实现各个环节交换数据时的类CLASS

视图:给用户最终呈现

控制器:后台程序,如 aspx.cs 代码或 JAVA servlet

后台数据连接操作的类化,模块化:

V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。

M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

  • 案例

    构造学生实体类,通过前端传入的学生信息,保存到学生实体类当中。在建立一个工具类,专门用来把类插入不同的数据库表当中。关键点是数据库表的字段要与学生类的表的字段相同(名称也相同),利用反射来获取实体类的属性名,以及属性值

2.学生实体类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


namespace web窗体.Models
{
    
    public class XsModel
    {
        private string 学号;
        private string 姓名;
        private string 专业名;
        private string 性别;
        private float 入校成绩;
        private string 手机号;
        private string 照片;
        private string 备注;
        private float 身高;
        private string 出生日期;
        private string 是否党员;
        private string 家庭住址;
        private int 年龄;

        public XsModel(string 学号, string 姓名, string 专业名, string 性别, float 入校成绩, string 手机号,
            string 照片, string 备注, float 身高, string 出生日期, string 是否党员, string 家庭住址, int 年龄)//构造函数
        {
            this.学号 = 学号;
            this.姓名 = 姓名;
            this.专业名 = 专业名;
            this.性别 = 性别;
            this.入校成绩 = 入校成绩;
            this.手机号 = 手机号;
            this.照片 = 照片;
            this.备注 = 备注;
            this.身高 = 身高;
            this.出生日期 = 出生日期;
            this.是否党员 = 是否党员;
            this.家庭住址 = 家庭住址;
            this.年龄 = 年龄;
        }
        public XsModel(string 学号, string 姓名, string 性别, float 身高, string 出生日期, 
            string 是否党员, string 专业名,  float 入校成绩, string 手机号,string 家庭住址)//构造函数
        {
            this.学号 = 学号;
            this.姓名 = 姓名;
            this.专业名 = 专业名;
            this.性别 = 性别;
            this.入校成绩 = 入校成绩;
            this.手机号 = 手机号;
            this.照片 = "";
            this.备注 = "";
            this.身高 = 身高;
            this.出生日期 = 出生日期;
            this.是否党员 = 是否党员;
            this.家庭住址 = 家庭住址;
            this.年龄 = 0;
        }
        public XsModel()//构造函数
        {
            this.学号 = "";
            this.姓名 = "";
            this.专业名 = "";
            this.性别 = "";
            this.入校成绩 = 0;
            this.手机号 = "";
            this.照片 = "";
            this.备注 = "";
            this.身高 = 0;
            this.出生日期 = "";
            this.是否党员 = "";
            this.家庭住址 = "";
            this.年龄 = 0;
        }
        public string GetXh() { return 学号; }
        public string GetXm() { return 姓名; }
        public string GetZym() { return 专业名; }
        public string GetXb() { return 性别; }
        public float GetRxcj() { return 入校成绩; }
        public string GetSjh() { return 手机号; }
        public string GetZp() { return 照片; }
        public string GetBz() { return 备注; }
        public float GetSg() { return 身高; }
        public string GetCsrq() { return 出生日期; }
        public string GetDy() { return 是否党员; }
        public string GetJtzz() { return 家庭住址; }
        public int Getnl() { return 年龄; }

        public void SetXh(string xh) { 学号 = xh; }
        public void SetXm(string xm) { 姓名=xm; }
        public void SetZym(string zym) { 专业名=zym; }
        public void SetXb(string xb) {  性别=xb; }
        public void SetRxcj(float rxcj) { 入校成绩=rxcj; }
        public void SetSjh(string sjh) {  手机号=sjh; }
        public void SetZp(string zp) {  照片=zp; }
        public void SetBz(string bz) {  备注=bz; }
        public void SetSg(float sg) { 身高=sg; }
        public void SetCsrq(string csrq) {  出生日期=csrq; }
        public void SetDy(string dy) {  是否党员=dy; }
        public void SetJtzz(string jtzz) {  家庭住址=jtzz; }
        public void Setnl(int nl) {  年龄=nl; }
    }
}

3.工具类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using web窗体.Models;
using System.Reflection;
namespace web窗体.Models
{
    public class insertintotable//工具类
    {
        public void infotosql(string table,object stu)//传入表名,与一个类对象
        {
           Type t = stu.GetType();//获取类的类型
           FieldInfo[] filinfos = t.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);//获取类的字段
           //System.Web.HttpContext.Current.Response.Write(filinfos.Length);//查看字段是否获取成功
            string sql = "insert into " + table + "(";//拼凑SQL语句
            for(int i=0;i<filinfos.Length;i++)
            {
                if (i == filinfos.Length - 1)
                {
                    sql += filinfos[i].Name + ")";
                }

                else
                {
                    sql += filinfos[i].Name + ",";
                }
            }
            sql += " values('";
            for(int i=0;i<filinfos.Length;i++)
            {
                if(i==filinfos.Length-1)
                {
                    sql += filinfos[i].GetValue(stu).ToString() + "')";
                }
                else
                {
                    sql += filinfos[i].GetValue(stu).ToString() + "','";
                }
            }
           // System.Web.HttpContext.Current.Response.Write(sql);//查看SQL语句是否正常
            new Class1().NonQuerysql(sql);//执行SQL语句
        }
    }
}

数据库连接,非查询代码

 private SqlConnection GetCn()//建立连接
        {
            string cnstr = "server=DESKTOP-KDHOUKC;database=学生管理;uid=admin;pwd=hhhqwer;";//正式开发是server为服务器的Ip地址
            //uid为远程用户名的名称,pwd为密码
            SqlConnection cn = new SqlConnection(cnstr);//连接数据库
            cn.Open();//打开数据库
            return cn;
        }
 public void NonQuerysql(string sql)
        {
            SqlConnection cn = GetCn();//连接数据库
            SqlCommand cmd = new SqlCommand(sql, cn);
            cmd.ExecuteNonQuery();
            cmd.Clone();
            cn.Close();
        }

4.后端操作

string stuxh = xh.Text;
            string stuxm = xm.Text;
            string stuxb = "男";
            if (xb2.Checked == true)
            {
                stuxb = "女";
            }
            float stusg = float.Parse(sg.Text);
            string stusr = yy.Text + "-" + mm.Text + "-" + dd.Text;
            string study = "是";
            if (no.Checked == true)
            {
                study = "否";
            }
            string stuzy = zy.Text;//专业
            float stucj = float.Parse(cj.Text);
            string stusj = phone.Text;
            string stuzz = shen.Text + "省" + shi.Text + "市" + quxian.Text + "区/县";
            XsModel stu = new XsModel(stuxh, stuxm, stuxb, stusg, stusr, study, stuzy, stucj, stusj, stuzz);//初始化学生实体类
            new insertintotable().infotosql("学生表", stu);//调用工具类

5.结果

前端

数据库

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

remandancy.h

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

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

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

打赏作者

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

抵扣说明:

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

余额充值