首页 > 代码库 > ADO.NET(完整修改和查询、实体类,数据访问类)

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"] + "\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 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 = http://www.mamicode.com/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();
简单学生管理系统

 

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