标签:
一、完整修改和查询
在编写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 = 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();
标签:
原文地址:http://www.cnblogs.com/zblc2016/p/5869684.html