ADO.NET完整的删除与修改, 实体类和数据访问类

 

1 完整的删除与修改

删除和修改之前先进行查找,看看有没有这条记录。

(1)先查

bool bb = false;//定义中间变量

cm.CommandText = "select * from users where uname=@name";

//@key占位符,Parameters先清空,再添加。

cm.Parameters.Clear();  //清空,

cm.Parameters.Add("@name",name1); //添加

con.Open();

SqlDataReader dr1 = cm.ExecuteReader();

if(dr1.HasRows ) //判断有没有这条记录

{

 bb = true;               

}

con.Close();

(2)删除

if(bb)//记录存在,执行下面删除

{

Console.Write("您的用户名是『"+name1+"』,请确认是否删除Y/N):");

string ss = Console.ReadLine().ToUpper();

if(ss=="Y")//用户确认删除

{

 编写删除语句;

 con.Open();

 cm.ExecuteNonQuery();

 con.Close();

Console.WriteLine("您的信息删除成功!");

}

Else //用户不修改

{

Console.WriteLine("您未进行信息删除");

}                

}

else//记录不存在,执行下面

{

 Console.WriteLine("用户名『"+name1+"』不存在");

}

(3)修改

if(bb)//记录存在,执行下面修改

{

Console.Write("您的用户名是『"+name1+"』,请确认是否修改(Y/N):");

string ss = Console.ReadLine().ToUpper();

if(ss=="Y")//用户确认修改

{

 编写修改语句;

 con.Open();

 cm.ExecuteNonQuery();

 con.Close();

 Console.WriteLine("您的信息修改成功!");

}

Else //用户不修改

{

Console.WriteLine("您未进行信息修改!");

}              

}

else//记录不存在,执行下面

{

 Console.WriteLine("用户名『"+name1+"』不存在");

}

 

2 SQL数据库字符串注入攻击

(1)攻击:控制台输入信息时加上“’;SQL语句;--”,这个语句会执行。

’;  结束上个语句  --注释掉后边的内容

(2)防止攻击:parameters @key占位符,先清空,再添加

Parameters这个集合中将此占位符所代表的数据补全。

如:

cm.CommandText = "select * from users where uname=@name";

cm.Parameters.Clear();

cm.Parameters.Add("@name",name1);


3 实体类和数据访问类

(1)实体类:封装

封装一个类,类名与数据库表名一致;成员变量名与列名一致,多一个下划线;

成员变量封装完的属性,就会与数据表中的列名一致。

每一行数据都可以存成一个对象,操作这个对象,就相当于对某一行数据进行整体操作。

 public class users
    {
        private string _uname;
        public string Uname
        {
            get { return _uname; }
            set { _uname = value; }
        }

        private int _umima;
        public int Umima
        {
            get { return _umima; }
            set { _umima = value; }
        }

        private string _unicheng;
        public string Unicheng
        {
            get { return _unicheng; }
            set { _unicheng = value; }
        }

        private bool _usex;
        public bool usex
        {
            get {return _usex;}
            set { _usex = value; }       
        }

        private DateTime _ubir;
        public DateTime Ubir
        {
            get { return _ubir; }
            set { _ubir = value; }
        }

        private string _uzu;
        public string Uzu
        {
            get { return _uzu; }
            set { _uzu = value; }
        }
    }

  

(2)数据访问类:

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

结构看起来会非常清晰。

//数据访问类
public class usersdata { SqlConnection conn = null; SqlCommand com = null; public usersdata()//结构化 { conn = new SqlConnection("server=.;database=lianxi;user=sa;pwd=123"); com = conn.CreateCommand(); } ///删除前先查用户是否存在 public bool chasg(string name)//查看时返回bool类型 { bool b = false; com.CommandText = "select * from users where uname=@name"; com.Parameters.Clear(); com.Parameters.Add("@name",name); conn.Open(); SqlDataReader dr = com.ExecuteReader(); if(dr.HasRows ) { b = true; } conn.Close(); return b; } ///删除 public void shan(string name) { com.CommandText = "delete from users where uname=@name"; com.Parameters.Clear(); com.Parameters.Add("@name",name ); conn.Open(); com.ExecuteNonQuery(); conn.Close(); } } //主函数 users u = new users();//实例化实体类 usersdata ud = new usersdata();实例化数据访问类 Console.Write("请输入要删除人的姓名:"); string name = Console.ReadLine(); bool bb = ud.chasg(name);//调用数据访问类中的查询方法 if (bb)//查询结果返回true,进行删除 { Console.Write("用户名存在"); ud.shan(name);//调用数据访问类中的删除方法 Console.Write("删除成功"); } else//查询结果返回false { Console.Write("用户名不存在"); }

  

4三层开发:

界面层 - UI

业务逻辑层 - C#代码部分

数据访问层 - 实体类和数据访问类

 

原文地址:https://www.cnblogs.com/zhang-dandan-1/p/5870023.html