首页 > 代码库 > ADO.NET 完整修改、删除、防字符串攻击

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); --占位符内容填充

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

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

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

ADO.NET 完整修改、删除、防字符串攻击