首先,我先把昨天所做的人事管理系统进行了优化,将其完善成为了一个更符合实际的系统。将修改及删除数据的数据库操作前面添加了一个查询语句,这样,在实际操作时,如果数据库中没有该条数据,则程序不会执行接下来的删除和修改操作,减少了程序的实际工作量。具体代码如下:
删除数据:
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 [email protected]"; 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 [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); conn3.Open(); cmd3.ExecuteNonQuery(); conn3.Close(); Console.WriteLine("修改完毕!"); break; } else//数据库中没有该条信息 { Console.WriteLine("未查到[" + Uname + "]用户信息,请确认用户名输入是否正确!"); } }
之后,我学习了一个防止在数据库中字符串注入攻击的方法:利用占位符@key进行编写代码。例如:
cmd.Parameters.Clear(); --添加占位符数据之前,要清空此集合
cmd.Parameters.Add("@pwd", Pwd); --占位符内容填充
最后,我学习了实体类和数据访问类。
实体类是用来封装类的,类名与数据库表名一致,成员变量名与列名一致,多一个下划线。
数据访问类就是将对数据库的一些操作,单独写到一个类中,封成一些方法,等待调用。
时间: 2024-10-25 06:56:47