ADO操作 练习 自动生成code
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Collections; namespace ado操作练习 { class Program { static void Main(string[] args) { //建立数据库连接类 //建立数据库查询类 //查询 //添加 //--1、防字符串注入攻击 //--2、添加的数据增加相应的限制 //--3、学号自动生成 //修改 //--1、防字符串注入攻击 //--2、用户修改后的数据增加相应的限制 //删除 SqlConnection conn = new SqlConnection("server=.;database=zuoye;user=sa;pwd=123"); SqlCommand cmd = conn.CreateCommand(); while (true) { #region 查询 //查询 cmd.CommandText = "select *from AdoStudent"; Console.WriteLine("学号 姓名 性别 生日 成绩"); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { Console.WriteLine(dr["code"].ToString() + dr["name"].ToString() + (Convert.ToBoolean(dr["sex"]) ? "男" : "女") + Convert.ToDateTime(dr["birthday"]).ToString("0.##") + Convert.ToInt32(dr["score"])); } } conn.Close(); #endregion //询问接下来的操作 Console.Write("将要进行的操作(1:添加,2:修改,3:删除):"); int caozuo = 0; caozuo = Convert.ToInt32(Console.ReadLine()); //操作开始 #region 添加 //添加 if (caozuo == 1) { //自动生成学号 //集合——查询——截取——生成 ArrayList codes = new ArrayList(); cmd.CommandText = "select *from AdoStudent"; conn.Open(); dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { int shu = Convert.ToInt32(dr["code"].ToString().Substring(1)); codes.Add(shu); } } conn.Close(); codes.Sort();//将codes集合里的数字按从大到小的顺序排列 string newcode = "s" + Convert.ToInt32(codes[(codes.Count - 1)]); //输入要添加的学生的信息 Console.WriteLine("新添加学生的学号:" + newcode); //学生姓名的限制:不能为空,如果输入错误就要重新输入。 string name = ""; while (true) { Console.Write("请输入学生的姓名:"); name = Console.ReadLine(); if (name != "") { break; } else { Console.WriteLine("姓名不能为空!"); } } //性别限制:只能输入男或者女,如果输入错误就重新输入。 string sex = ""; bool panduan = false; while (true) { Console.Write("请输入学生性别:"); sex = Console.ReadLine(); if (sex == "男") { panduan = true; break; } else if (sex == "女") { panduan = false; break; } else { Console.WriteLine("性别输入有误!"); } } //生日限制:try一下,看输入的可不可以转换成datetime类型 DateTime birthday = DateTime.Now; while (true) { Console.Write("请输入学生生日:"); try { birthday = Convert.ToDateTime(Console.ReadLine()); break; } catch { Console.WriteLine("生日输入有误!"); } } //成绩限制:0<score<=100 decimal score = 0m; while (true) { Console.Write("请输入学生成绩:"); score = Convert.ToDecimal(Console.ReadLine()); if (score >= 0 && score <= 100) { break; } else { Console.WriteLine("成绩输入有误!"); } } cmd.CommandText = "insert into AdoStudent values(@newcode,@name,@sex,@birthday,@score)"; cmd.Parameters.Clear(); cmd.Parameters.Add("@newcode", newcode); cmd.Parameters.Add("@name", name); cmd.Parameters.Add("@sex", sex); cmd.Parameters.Add("@birthday", birthday); cmd.Parameters.Add("@score", score); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Console.Clear(); Console.WriteLine("添加成功!"); //continue; } #endregion 修改 //修改 else if (caozuo == 2) { while (true) { //首先要确定这个学号对应的学生信息存不存在 bool has = false; //判断是否有这个学生 Console.Write("请输入要修改的学生编号:"); string xiugai = Console.ReadLine(); cmd.CommandText = "select *from AdoStudent where code ='" + xiugai + "'"; conn.Open(); dr = cmd.ExecuteReader(); if (dr.HasRows) { //此处只需要查询一遍有无这个学号即可 has = true; } conn.Close(); if (has) { Console.WriteLine("已查询到此学生信息,请继续修改操作"); string name = ""; while (true) { Console.Write("请输入学生的姓名:"); name = Console.ReadLine(); if (name != "") { break; } else { Console.WriteLine("姓名不能为空!"); } } //性别限制:只能输入男或者女,如果输入错误就重新输入。 string sex = ""; bool panduan = false; while (true) { Console.Write("请输入学生性别:"); sex = Console.ReadLine(); if (sex == "男") { panduan = true; break; } else if (sex == "女") { panduan = false; break; } else { Console.WriteLine("性别输入有误!"); } } //生日限制:try一下,看输入的可不可以转换成datetime类型 DateTime birthday = DateTime.Now; while (true) { Console.Write("请输入学生生日:"); try { birthday = Convert.ToDateTime(Console.ReadLine()); break; } catch { Console.WriteLine("生日输入有误!"); } } //成绩限制:0<score<=100 decimal score = 0m; while (true) { Console.Write("请输入学生成绩:"); score = Convert.ToDecimal(Console.ReadLine()); if (score >= 0 && score <= 100) { break; } else { Console.WriteLine("成绩输入有误!"); } } //修改数据库里的数据 cmd.CommandText = "update AdoStudent set name=@name,sex=@sex,birthday=@birthday,score=@score where code='" + xiugai + "'"; //防止字符串注入攻击 cmd.Parameters.Clear(); cmd.Parameters.Add("@name", name); cmd.Parameters.Add("@sex", sex); cmd.Parameters.Add("@birthday", birthday); cmd.Parameters.Add("@score", score); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Console.Clear(); Console.WriteLine("修改成功!"); //break;//跳出最里面的循环 } else { Console.WriteLine("查无此学生信息!"); } } //continue; } #region 删除 //删除 else if (caozuo == 3) { string isok = ""; string shanchu = ""; while (true) { //1、让用户输入要删除的学生编号 bool has = false; //判断是否有这个学生 Console.Write("请输入要删除的学生编号:"); shanchu = Console.ReadLine(); cmd.CommandText = "select *from AdoStudent where Code ='" + shanchu + "'"; conn.Open(); dr = cmd.ExecuteReader(); if (dr.HasRows) { has = true; } conn.Close(); //判断有无此学生信息 if (has)//有,那么询问用户是否确定删除 { Console.Write("已查到此学生信息,是否要删除?输入Y执行删除:"); isok = Console.ReadLine(); break; } else { Console.WriteLine("无此学生信息,输入有误!"); } } //3、执行删除 if (isok.ToUpper() == "Y") { cmd.CommandText = "delete from AdoStudent where Code ='" + shanchu + "'"; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Console.Clear(); Console.WriteLine("删除成功!"); //continue; } } #endregion else { Console.WriteLine("输入的操作指令有误!"); } //操作结束 } } } }
防字符串注入攻击:
使用Parameters集合和占位符(例如:@name)
例如:
cmd.CommandText = "update AdoStudent set name=@name,sex=@sex where code='" + xiugai + "'";
cmd.Parameters.Clear();
cmd.Parameters.Add("@name", name);
cmd.Parameters.Add("@sex", sex);
cmd.Parameters.Add("@birthday", birthday);
cmd.Parameters.Add("@score", score);