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 [email protected],[email protected],[email protected],[email protected],[email protected] where [email protected];";
                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"] + "\t" + dr["name"] + "\t" + ((bool)dr["sex"] ? "男" : "女") + "\t" + dr["banji"] + "\t" + 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 [email protected]";
          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 [email protected],[email protected],[email protected],[email protected] where [email protected]";
          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 [email protected]";
          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("学号" + "\t" + "姓名" + "\t" + "性别" + "\t" + "班级" + "\t" + "生日");
            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();

简单学生管理系统

时间: 2024-08-03 15:18:04

ADO.NET(完整修改和查询、实体类,数据访问类)的相关文章

2017-4-20实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类:  实体类 二.数据访问类 将某个表的数据库操作写成一个一个方法,放入到此类中供外部调用 这是一个数据访问类:  数据访问类 三.字符串攻击,防攻击 字符串攻击: 主要利用获取需用户输入

2017-4-21 字符串攻击 防御 实体类 数据访问类 属性扩展 三层架构开发

(一)防止sql数据库字符串注入攻击: 1.字符串注入攻击实在填写内容是,插入的sql语句,对数据库进行的操作 数据库的攻击就是插入新的sql语句,并对后面的语句进行注销:');update Students set Sname='';-- 2.防止字符串注入攻击: cmd.CommandText = "update Student set Sname = @a",   ----  用占位符进行占位,这样在攻击的时候就会吧攻击的内容当成sql语句内容直接插入到数据库 cmd.Param

实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namesp

实体类,数据访问类应用

一,表中某个数据进行重新排序 (1)数据访问类 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; namespace ConsoleApplication2.App_Code { public class StudentsData { SqlConnection conn = null; SqlCommand cmd

实体类 数据访问类 函数

实体类:封装封装一个类,类名与数据库表名一致成员变量名与列名一致,多一个下划线成员变量封装完的属性,就会与数据表中的列名一致 每一行数据都可以存成一个对象,操作这个对象,就相当于对某一行数据进行整体操作 数据访问类:就是将对数据库的一些操作,单独写到一个类中,封成一些方法,等待调用 结构看起来会非常清晰 函数:1.有参有反public 数据类型 函数名(数据类型 参数名){ return 数据类型;} 2.有参无反public void 函数名(数据类型 参数名){ } 3.无参无反public

ADO.NET 【实体类】【数据访问类】

认识分层结构,分层式结构是最常见,也是最重要的一种结构. 三层架构(3-tier architecture) 界面层(User Interface layer) 主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问. 业务逻辑层(Business Logic Layer)主要是针对具体的问题的操作,也可以理解成对数据层的操作 数据访问层(Data access layer)主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层 数据访问层包括   实体类 数据访问类 优点

0913 完整修改,删除-实体类-数据操作类

<完整修改删除> 昨天我们使用c#访问数据库会有很多弊端,如果数据库中没有这一条信息也会返回删除成功 今天完整修改删除就会克服这个困难 第一步 需要先查询 #region 查询                Console.WriteLine("学号" + "\t" + "姓名" + "\t" + "性别" + "\t" + "    " + "

完整增删改查 实体类 数据访问

完整修改和查询:中间变量运用. 1.先查 2.执行操作 查询                Console.WriteLine("学号" + "\t" + "姓名" + "\t" + "性别" + "\t" + "    " + "生日" + "\t" + "民族" + "\t");   

ADO面向对象使用(实体类、数据访问类、范型集合)

ADO面向对象使用: !!!!!在其它文件夹下创建新类,加public!再考虑是不是引用数据库命名空间和其它类的命名空间!是否需要将构造函数写出来,将数据库的两个类实例化!!!!! 实体类:就是封装,将数据库中的表封装成同名的类,里面的成员变量与表里面的列是对应的,一个对象就代表数据库中一行数据: 字段扩展:查询关联的外键表数据,只读! 数据访问类:就是对于实体类对应的数据库进行操作的,就是写方法! 泛型集合: List<T> list = new List<T>(); T代表的就