首页 > 代码库 > 字符串攻击、防攻击、实体类、数据访问类--2016年11月29日
字符串攻击、防攻击、实体类、数据访问类--2016年11月29日
防止SQL数据库字符串注入攻击
SQL数据库字符串注入攻击:
需要使用cmd.Parameters这个集合
占位符: @key 代表这个位置用这个占位符占住了
Parameters这个集合中将此占位符所代表的数据补全
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);
实体类
封装
封装一个类,类名与数据库表名一致
成员变量名与列名一致,多一个下划线
成员变量封装完的属性,就会与数据表中的列名一致
例:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 实体类_数据访问类.App_Code{ public class Users { private int _code; /// <summary> /// code /// </summary> public int Code { get { return _code; } set { _code = value; } } private string _usename; /// <summary> /// 用户名 /// </summary> public string Usename { get { return _usename; } set { _usename = value; } } private string _password; /// <summary> /// 用户密码 /// </summary> public string Password { get { return _password; } set { _password = value; } } private string _nick; /// <summary> /// 昵称 /// </summary> public string Nick { get { return _nick; } set { _nick = value; } } private bool _sex; /// <summary> /// 性别 /// </summary> public bool Sex { get { return _sex; } set { _sex = value; } } private string _nation; /// <summary> /// 民族 /// </summary> public string Nation { get { return _nation; } set { _nation = value; } } private string _class; /// <summary> /// 班级 /// </summary> public string _class1 { get { return _class; } set { _class = value; } } private DateTime _birthday; /// <summary> /// 生日 /// </summary> public DateTime Birthday { get { return _birthday; } set { _birthday = value; } } }}
每一行数据都可以存成一个对象,操作这个对象,就相当于对某一行数据进行整体操作
数据访问类
就是将对数据库的一些操作,单独写到一个类中,封成一些方法,等待调用
结构看起来会非常清晰
例:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;namespace 实体类_数据访问类.App_Code{ public class UserDate { SqlConnection conn = null; SqlCommand com = null; public UserDate() { conn = new SqlConnection("server=.;database=Data1128;user=sa;pwd=123"); com = conn.CreateCommand(); } /// <summary> /// 将数据添加到Users表中,添加成功返回true,失败返回false /// </summary> /// <param name="u">要添加到表中的Users对象</param> /// <returns>添加成功返回true,失败返回false</returns> public bool insert(Users u) { bool ok = false; int count = 0; com.CommandText = "insert into Users values(@usename,@password,@nick,@sex,@nation,@class,@birthday)"; com.Parameters.Clear(); com.Parameters.AddWithValue("@usename",u.Usename); com.Parameters.AddWithValue("@password", u.Password); com.Parameters.AddWithValue("@nick", u.Nick); com.Parameters.AddWithValue("@sex", u.Sex); com.Parameters.AddWithValue("@nation", u.Nation); com.Parameters.AddWithValue("@class", u._class1); com.Parameters.AddWithValue("@birthday", u.Birthday); try { conn.Open(); count=com.ExecuteNonQuery(); } catch { ok = false; } finally { conn.Close(); } if(count>0) { ok = true; } return ok; } /// <summary> /// 通过泛型集合对数据进行查询 /// </summary> /// <returns>返回一个集合</returns> public List<Users> Select() { List<Users> list= new List<Users>(); com.CommandText = "select *from Users"; conn.Open(); SqlDataReader dr = com.ExecuteReader(); if(dr.HasRows) { while(dr.Read()) { Users u = new Users(); u.Code = Convert.ToInt32(dr["code"]); u.Usename = dr["usename"].ToString(); u.Password = dr["password"].ToString(); u.Nick = dr["nick"].ToString(); u.Sex = Convert.ToBoolean(dr["sex"]); u.Nation = dr["nation"].ToString(); u._class1 = dr["class"].ToString(); u.Birthday = Convert.ToDateTime(dr["birthday"]); list.Add(u); } } conn.Close(); return list; } /// <summary> /// 根据usename进行查询 /// </summary> /// <param name="usename">要查询的usename对象</param> /// <returns>返回bool类型的值,返回true表示有usename这条数据</returns> public bool select(string usename) { bool has = false; com.CommandText = "select *from Users where usename=@usename"; com.Parameters.Clear(); com.Parameters.AddWithValue("@usename",usename); conn.Open(); SqlDataReader dr = com.ExecuteReader(); if(dr.HasRows) { has = true; } conn.Close(); return has; } //public void delete(string username) //{ // com.CommandText = "delete from Users where usename=@usename"; // com.Parameters.Clear(); // com.Parameters.AddWithValue("@usename", username); // conn.Open(); // com.ExecuteNonQuery(); // conn.Close(); //} /// <summary> /// 删除数据 /// </summary> /// <param name="username">要查询的usename对象</param> /// <returns>返回bool类型的值,返回true表示删除成功</returns> public bool delete(string username) { bool have = false; int cc = 0; com.CommandText = "delete from Users where usename=@usename"; com.Parameters.Clear(); com.Parameters.AddWithValue("@usename", username); try { conn.Open(); cc = com.ExecuteNonQuery(); } catch { have = false; } finally { conn.Close(); } if (cc > 0) { have = true; } return have; } }}
*三层开发:
界面层 - UI层
业务逻辑层 - C#代码部分
数据访问层 - 实体类和数据访问类
字符串攻击、防攻击、实体类、数据访问类--2016年11月29日
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。