zoukankan      html  css  js  c++  java
  • ADO.NET 完整修改、删除、防字符串攻击

      首先,我先把昨天所做的人事管理系统进行了优化,将其完善成为了一个更符合实际的系统。将修改及删除数据的数据库操作前面添加了一个查询语句,这样,在实际操作时,如果数据库中没有该条数据,则程序不会执行接下来的删除和修改操作,减少了程序的实际工作量。具体代码如下:

      删除数据:

                while (true)
                        {
                            bool has = false;
                            //提示用户需要操作的内容
                            Console.WriteLine("请输入要删除的用户名:");
                            string Uname = Console.ReadLine();
                            //1.连接数据库
                            SqlConnection conn2 = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123;");
                            //2.设置要对数据库中的表的操作
                            SqlCommand cmd2 = conn2.CreateCommand();
                            cmd2.CommandText = "select * from Users where UserName='" + Uname + "'";//查询数据库中是否有该条数据
    
                            conn2.Open();
                            SqlDataReader dr2 = cmd2.ExecuteReader();
                            if (dr2.HasRows)//判断是否包含代码
                            {
                                has = true;
                            }
                            conn2.Close();
                            //3.执行操作
                            if (has)//数据库中有该条信息
                            {
                                Console.WriteLine("已经查到[" + Uname + "]用户信息,是否确定要删除该条信息?(Y/N):");
                                string u = Console.ReadLine();
                                if (u.ToUpper() == "Y")
                                {
                                    cmd2.CommandText = "delete  from Users where UserName=@uname";
                                    cmd2.Parameters.Clear();
                                    cmd2.Parameters.Add("@uname",Uname);
    
    
                                    conn2.Open();
                                    cmd2.ExecuteNonQuery();
                                    conn2.Close();
                                    Console.WriteLine(Uname + "删除成功!");
                                    break;
                                }
                            }
                            else//数据库中没有该条信息
                            {
                                Console.WriteLine("未查到[" + Uname + "]用户信息,请确认用户名输入是否正确!");
                            }
                        }

      修改数据:

                while (true)
                        {
                            bool has = false;
                            Console.Write("请输入您要更改的用户名:");
                            string Uname = Console.ReadLine();
    
                            SqlConnection conn3 = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123;");
    
                            SqlCommand cmd3 = conn3.CreateCommand();
                            cmd3.CommandText = "select * from Users where UserName='" + Uname + "'";
    
                            conn3.Open();
                            SqlDataReader dr3 = cmd3.ExecuteReader();
                            if (dr3.HasRows)
                            {
                                has = true;
                            }
                            conn3.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);
    
                                conn3.Open();
                                cmd3.ExecuteNonQuery();
                                conn3.Close();
                                Console.WriteLine("修改完毕!");
                                break;
    
                            }
                            else//数据库中没有该条信息
                            {
                                Console.WriteLine("未查到[" + Uname + "]用户信息,请确认用户名输入是否正确!");
                            }
                        }

      之后,我学习了一个防止在数据库中字符串注入攻击的方法:利用占位符@key进行编写代码。例如:

      cmd.Parameters.Clear(); --添加占位符数据之前,要清空此集合
      cmd.Parameters.Add("@pwd", Pwd); --占位符内容填充

      最后,我学习了实体类和数据访问类。

      实体类是用来封装类的,类名与数据库表名一致,成员变量名与列名一致,多一个下划线。

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

  • 相关阅读:
    LeetCode:Remove Nth Node From End of List
    LeetCode:Swap Nodes in Pairs
    LeetCode:Merge Two Sorted Lists
    LeetCode:Maximum Subarray
    LeetCode:Linked List Cycle
    LeetCode:Search Insert Position
    LeetCode:Roman to Integer
    算法程序设计题语言类笔记
    我的小游戏之2048
    LeetCode:Best Time to Buy and Sell Stock II
  • 原文地址:https://www.cnblogs.com/hongsen3/p/5869674.html
Copyright © 2011-2022 走看看