zoukankan      html  css  js  c++  java
  • ADO.NET(完整修改和查询、实体类,数据访问类)

    一、完整修改和查询

    在编写c#语句时需考虑到用户体验,例如在编写修改语句时,需要考虑到输入的内容在数据库中是否能够找到。

    中间变量运用

    1、先查

    2、执行操作

    完整修改语句:

     bool has = false;
    
                Console.Write("请输入要修改的用户名:");
                string Uname = Console.ReadLine();
    //到数据库中查询输入的用户名是否存在
                SqlConnection conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123");//连接数据库
                SqlCommand cmd = conn.CreateCommand();//数据库操作
                cmd.CommandText = "select *from Users where UserName='" + Uname + "'";
                conn.Open();//打开数据库
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    has = true;
                }
                conn.Close();//关闭数据库
    
                if (has)
                {
                    Console.WriteLine("已经查到[" + Uname + "]用户信息,请进行修改");
                    Console.Write("请输入修改后的密码:");
                    string Pwd = Console.ReadLine();
                    Console.Write("请输入修改后的昵称:");
                    string Nname = Console.ReadLine();
                    Console.Write("请输入修改后的性别:");
                    string Sex = Console.ReadLine();
                    Console.Write("请输入修改后的生日:");
                    string Birthday = Console.ReadLine();
                    Console.Write("请输入修改后的民族:");
                    string Nation = Console.ReadLine();
    
                    //@key  占位符  
                    cmd.CommandText = " update Users set PassWord=@pwd,NickName=@nname,Sex=@sex,Birthday=@bir,Nation=@nat where UserName=@uname;";
                    cmd.Parameters.Clear();
                    cmd.Parameters.Add("@pwd", Pwd);
                    cmd.Parameters.Add("@nname",Nname);
                    cmd.Parameters.Add("@sex", (Sex=="")?"1":"0");
                    cmd.Parameters.Add("@bir", Birthday);
                    cmd.Parameters.Add("@nat", Nation);
                    cmd.Parameters.Add("@uname", Uname);
    
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    Console.WriteLine("修改完毕!");
                }
                else
                {
                    Console.WriteLine("未查到[" + Uname + "]用户信息,请确认用户名输入是否正确!");
                }

    完整删除语句:

    bool has = false;
    
                Console.Write("请输入要删除的用户名:");
                string Uname = Console.ReadLine();
    //查询要删除的用户名在数据库中是否存在
                SqlConnection conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123");
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = "select *from Users where UserName='" + Uname + "'";
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    has = true;
                }
                conn.Close();
    
                if (has)
                {
                    Console.WriteLine("已经查到[" + Uname + "]用户信息,是否确定要删除吗?(Y/N):");
                    string u = Console.ReadLine();
                    if (u.ToUpper() == "Y")//确定删除
                    {
                        cmd.CommandText = "delete from Users where UserName='" + Uname + "'";
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                        Console.WriteLine(Uname + "删除成功!");
                    }
                }
                else
                {
                    Console.WriteLine("未查到[" + Uname + "]用户信息,请确认用户名输入是否正确!");
                }

    二、SQL数据库字符串注入攻击

    需要使用cmd.Parameters这个集合
    占位符: @key 代表这个位置用这个占位符占住了

    arameters这个集合中将此占位符所代表的数据补全

    cmd.Parameters.Clear(); --添加占位符数据之前,要清空此集合
    cmd.Parameters.Add("@pwd", Pwd); --占位符内容填充
    cmd.Parameters.Add("@nname",Nname);
    cmd.Parameters.Add("@sex", (Sex=="男")?"1":"0");
    cmd.Parameters.Add("@bir", Birthday);
    cmd.Parameters.Add("@nat", Nation);
    cmd.Parameters.Add("@uname", Uname);

    三、实体类,数据访问类

    1.实体类:封装
    封装一个类,类名与数据库表名一致
    成员变量名与列名一致,多一个下划线
    成员变量封装完的属性,就会与数据表中的列名一致

    每一行数据都可以存成一个对象,操作这个对象,就相当于对某一行数据进行整体操作

    2.数据访问类:

    就是将对数据库的一些操作,单独写到一个类中,封成一些方法,等待调用

    结构看起来会非常清晰。

    3.三层开发:
    界面层 - UI层
    业务逻辑层 - C#代码部分
    数据访问层 - 实体类和数据访问类

     //实体类
    public  class stu
        {
            private string _xuehao;
          /// <summary>
          /// 学号
          /// </summary>
            public string Xuehao
            {
                get { return _xuehao; }
                set { _xuehao = value; }
            }
    
            private string _name;
          /// <summary>
          /// 学生姓名
          /// </summary>
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            private bool _sex;
          /// <summary>
          /// 性别
          /// </summary>
            public bool Sex
            {
                get { return _sex; }
                set { _sex = value; }
            }
            private string _banji;
          /// <summary>
          /// 班级
          /// </summary>
            public string Banji
            {
                get { return _banji; }
                set { _banji = value; }
            }
            private DateTime _bir;
          /// <summary>
          /// 出生年月
          /// </summary>
            public DateTime Bir
            {
                get { return _bir; }
                set { _bir = value; }
            }
    //数据访问类
      public  class studata
        {
          SqlConnection conn = null;//数据连接与操作
            SqlCommand cmd = null;
    
            public studata()//构造函数
            {
                conn = new SqlConnection("server=.;database=new01;user=sa;pwd=123");
                cmd = conn.CreateCommand();
            }
          /// <summary>
          /// 查询数据库
          /// </summary>
          public void Select()
          {
              cmd.CommandText = "select *from stu";//查询语句
              conn.Open();//打开数据库
              SqlDataReader dr = cmd.ExecuteReader();//调用此方法用来查询 
              while (dr.Read())
              {
                  Console.WriteLine(dr["xuehao"] + "	" + dr["name"] + "	" + ((bool)dr["sex"] ? "" : "") + "	" + dr["banji"] + "	" + Convert.ToDateTime(dr["bir"]).ToString("yyyy-MM-dd"));
              }
              conn.Close();//关闭数据库
          }
          /// <summary>
          /// stu表添加方法
          /// </summary>
          /// <param name="s">要添加到数据库的stu对象</param>
          public void insert(stu s)
          {
              cmd.CommandText = "insert into stu values(@xuehao,@name,@sex,@banji,@bir)";
              cmd.Parameters.Clear();//清空此集合
              cmd.Parameters.AddWithValue("@xuehao",s.Xuehao);
              cmd.Parameters.AddWithValue("@name", s.Name);
              cmd.Parameters.AddWithValue("@sex", s.Sex );
              cmd.Parameters.AddWithValue("@banji", s.Banji);
              cmd.Parameters.AddWithValue("@bir", s.Bir);
              conn.Open();
              cmd.ExecuteNonQuery();
              conn.Close();
          }
          /// <summary>
          /// 查询是否存在
          /// </summary>
          /// <param name="xuehao"></param>
          /// <returns></returns>
          public stu select(string xuehao)
          {
              stu s = null;
              cmd.CommandText = "select *from stu where xuehao=@a";
              cmd.Parameters.Clear();
              cmd.Parameters.Add("@a", xuehao);
              conn.Open();
              SqlDataReader dr = cmd.ExecuteReader();
              if(dr.HasRows)
              {
                  dr.Read();
                  s = new stu();
                  s.Xuehao=dr["xuehao"].ToString();
                  s.Name=dr["name"].ToString();
                  s.Banji = dr["banji"].ToString();
                  s.Sex = Convert.ToBoolean(dr["sex"]);
                  s.Bir = Convert.ToDateTime(dr["bir"]);
              }
              conn.Close();
              return s;
    
          }
          /// <summary>
          /// 修改
          /// </summary>
          /// <param name="s">要修改到数据库的stu对象</param>
          public void update(stu s)
          {
              cmd.CommandText = "update stu set name=@name,sex=@sex,banji=@banji,bir=@bir where xuehao=@xuehao";
              cmd.Parameters.Clear();//清空此集合
              cmd.Parameters.AddWithValue("@xuehao", s.Xuehao);
              cmd.Parameters.AddWithValue("@name",s.Name);
              cmd.Parameters.AddWithValue("@sex", s.Sex);
              cmd.Parameters.AddWithValue("@banji", s.Banji);
              cmd.Parameters.AddWithValue("@bir",s.Bir);
              conn.Open();
             cmd.ExecuteNonQuery();
              conn.Close();
          }
          /// <summary>
          /// 删除
          /// </summary>
          /// <param name="xuehao"></param>
          /// <returns></returns>
          public bool delete(string xuehao)
          {
              bool delOK = false;
              cmd.CommandText = "delete from stu where xuehao =@a";
              cmd.Parameters.Clear();
              cmd.Parameters.Add("@a", xuehao);
              conn.Open();
              try
              {
                  cmd.ExecuteNonQuery();
                  delOK = true;
              }
              catch { }
    
              conn.Close();
              return delOK;
          }
        }
    //c#代码部分
     studata sdata = new studata();//实例化studata这个类
                Console.WriteLine("学号" + "	" + "姓名" + "	" + "性别" + "	" + "班级" + "	" + "生日");
                sdata.Select();
                Console.ReadLine();
                Console.Write("请输入你想执行的操作(1添加,2修改,3删除):");
                try//异常保护
                {
                    int code = int.Parse(Console.ReadLine());
                    if (code == 1 || code == 2 || code == 3)
                    {
                        if (code == 1)//添加
                        {
                            stu s = new stu();//实例化
                            string[] x = new string[3];
                            while (true)
                            {
                                Console.Write("请输入您要输入的学生学号:");
                                x[0] = Console.ReadLine();
                                if (x[0] == "")
                                {
                                    Console.WriteLine("学号不能为空");
                                }
                                else if (x[0].Length != 4 || x[0].StartsWith("S") != true)
                                {
                                    Console.WriteLine("学号输入有误,必须以S开头");
                                }
                                else
                                {
                                    stu s2 = sdata.select(x[0]);
                                    if (s2!=null)
                                    {
                                        Console.WriteLine("此学号已经存在,请重新输入!");
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                            s.Xuehao = x[0];
                            Console.Write("请输入您要输入的学生姓名:");
                            s.Name = Console.ReadLine();
                            while (true)
                            {
                                Console.Write("请输入您要输入的学生性别(false代表女,true代表男):");
                                x[1] = (Console.ReadLine()).ToLower();
                                if (x[1] == "true" || x[1] == "false")
                                {
                                    break;
                                }
                                else
                                {
                                    Console.WriteLine("性别代码输入有误!");
                                }
                            }
                           s.Sex = Convert.ToBoolean(x[1]);
                            Console.Write("请输入您要输入的学生班级:");
                            s.Banji = Console.ReadLine();
                            Console.Write("请输入您要输入的学生生日:");
                            s.Bir = Convert.ToDateTime(Console.ReadLine());
                            sdata.insert(s);//调用sdata中的insert方法
                            sdata.Select();//调用sdata中的Select方法
                        }
                    //修改
                        else if (code == 2)
                        {
                            stu s = new stu();//实例化
                            Console.Write("请输入您要修改的学生的学号:");
                            s.Xuehao = Console.ReadLine();
                            //判断输入的学号在数据库中是否存在
                            stu s2 = sdata.select(s.Xuehao);//将输入的学号调入sdata中的select方法中,并赋值给s2
                            if (s2 != null)
                            {
                                Console.WriteLine("已查到此信息,按任意键修改");
                                Console.ReadKey();
                                Console.Write("请输入您修改后的学生姓名:");
                                s.Name = Console.ReadLine();
                                string[] x = new string[1];
                                while (true)
                                {
                                    Console.Write("请输入您修改后的学生性别(false代表女,true代表男):");
                                    x[0] = (Console.ReadLine()).ToLower();
                                    if (x[0] == "true" || x[0] == "false")
                                    {
                                        break;
                                    }
                                    else
                                    {
                                        Console.WriteLine("性别代码输入有误!");
                                    }
                                }
                                s.Sex = Convert.ToBoolean(x[0]);
                                Console.Write("请输入您修改后的学生班级:");
                                s.Banji = Console.ReadLine();
                                Console.Write("请输入您修改后的学生生日:");
                                s.Bir = Convert.ToDateTime(Console.ReadLine());
                                sdata.update(s);//调用sdata中的update方法
                                Console.WriteLine("修改成功");
                                sdata.Select();//调用sdata中的Select方法
                            }
                            else
                            {
                                Console.WriteLine("未查到有关信息,请查看是否输错");
                            }
                        }
                        else
                        {
                            stu s = new stu(); 
                            Console.Write("请输入您要删除的学生的学号:");
                            s.Xuehao = Console.ReadLine();
                            //判断输入的学号在数据库中是否存在
                            stu s2 = sdata.select(s.Xuehao);
                            if (s2 != null)
                            {
                                Console.WriteLine("已查到此信息,请按任意键删除");
                                Console.ReadKey();
                                bool ok = sdata.delete(s.Xuehao);
                                if (ok)
                                {
                                    Console.WriteLine("删除成功!");
                                    sdata.Select();
                                }
                                else
                                    Console.WriteLine("删除失败!");
                            }
                            else
                                Console.WriteLine("未查到有关信息,请查看是否输错");
                        }
                    }
                    else
                    {
                        Console.WriteLine("您输入有误!");
                    }
                }
                catch
                {
                    Console.WriteLine("您输入的不是数字!");
                }
                Console.ReadLine();
    简单学生管理系统
  • 相关阅读:
    VB.NET与C# 语法区别展示
    利用 ASP.NET 的内置功能抵御 Web 攻击 (1)
    .NET 中获取调用方法名
    C# 6.0 的那些事
    .NET基础之自定义泛型
    汽车学习---汽车知识大全【all】
    Django学习---抽屉热搜榜分析【all】
    Python 系统学习梳理_【All】
    Python学习---装饰器/迭代器/生成器的学习【all】
    Java 系统学习梳理_【All】
  • 原文地址:https://www.cnblogs.com/zblc2016/p/5869684.html
Copyright © 2011-2022 走看看