程序分三层:界面层、业务逻辑层、数据访问层

比较规范的写程序方法,要把业务逻辑层和数据访问层分开,此时需要创建实体类和数据访问类

实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 增删改查.app_ado
{
public class users
{
private int _Ids; /// <summary>
/// ids
/// </summary>
public int Ids
{
get { return _Ids; }
set { _Ids = value; }
}
private string _UserName; /// <summary>
/// 用户名
/// </summary>
public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
private string _PassWord; /// <summary>
/// 密码
/// </summary>
public string PassWord
{
get { return _PassWord; }
set { _PassWord = value; }
}
private string _NickName; /// <summary>
/// 昵称
/// </summary>
public string NickName
{
get { return _NickName; }
set { _NickName = value; }
}
private bool _Sex; /// <summary>
/// 性别
/// </summary>
public bool Sex
{
get { return _Sex; }
set { _Sex = value; }
}
private DateTime _Birthday; /// <summary>
/// 生日
/// </summary>
public DateTime Birthday
{
get { return _Birthday; }
set { _Birthday = value; }
}
private string _Nation; /// <summary>
/// 民族
/// </summary>
public string Nation
{
get { return _Nation; }
set { _Nation = value; }
}
private string _Class; /// <summary>
/// 班级
/// </summary>
public string Class
{
get { return _Class; }
set { _Class = value; }
} }
}

创建一个类,把整个数据库表单的数据都封装一下

数据访问类:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 增删改查.app_ado
{
class userdata
{
SqlConnection conn = null;
SqlCommand cmd = null; public userdata()
{
conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123");
cmd = conn.CreateCommand();
}
/// <summary>
/// 查询所有信息
/// </summary>
public void select()
{
cmd.CommandText = "select ids,username,password,nickname,sex,birthday,nationname,classname from users join nation on users.nation=nation.nationcode join class on users.class=class.classcode";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
int n = ;
while (n < dr.FieldCount)
{
if (dr[n] is Boolean)
Console.Write(((Boolean)dr[n] ? "男" : "女") + "\t");
else if (dr[n] is DateTime)
Console.Write((((DateTime)dr[n]).ToShortDateString()) + "\t");
else
Console.Write(dr[n] + "\t");
n++;
}
Console.WriteLine();
}
}
conn.Close();
}
/// <summary>
/// 添加信息
/// </summary>
/// <param name="u"></param>
/// <returns></returns>
public bool Insert(users u)
{
bool ok = false;
int count = ; cmd.CommandText = "insert into users values(@a,@b,@c,@d,@e,@f,@g)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a", u.UserName);
cmd.Parameters.AddWithValue("@b", u.PassWord);
cmd.Parameters.AddWithValue("@c", u.NickName);
cmd.Parameters.AddWithValue("@d", u.Sex);
cmd.Parameters.AddWithValue("@e", u.Birthday);
cmd.Parameters.AddWithValue("@f", u.Nation);
cmd.Parameters.AddWithValue("@g", u.Class);
try
{
conn.Open();
count = cmd.ExecuteNonQuery();
}
catch { ok = false; }
finally
{
conn.Close();
} if (count > )
ok = true; return ok;
}
/// <summary>
/// 根据用户名查询
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public List<users> Select(string username)
{
List<users> list = new List<users>();
cmd.CommandText = "select *from Users where UserName = @a";
cmd.Parameters.Clear();
cmd.Parameters.Add("@a", username);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
while (dr.Read())
{
users u = new users();
u.Ids = Convert.ToInt32(dr["ids"]);
u.UserName = dr["UserName"].ToString();
u.PassWord = dr["PassWord"].ToString();
u.NickName = dr["NickName"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Birthday = Convert.ToDateTime(dr["Birthday"]);
u.Nation = dr["Nation"].ToString();
u.Class = dr["Class"].ToString(); list.Add(u);
}
conn.Close();
return list;
}
/// <summary>
/// 根据列名查询信息
/// </summary>
/// <param name="lname"></param>
/// <param name="username"></param>
/// <returns></returns>
public List<users> Select(string lname,string username)
{
List<users> list = new List<users>();
cmd.CommandText = "select *from Users where "+lname+" = @a";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@a", username);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
while (dr.Read())
{
users u = new users();
u.Ids = Convert.ToInt32(dr["ids"]);
u.UserName = dr["UserName"].ToString();
u.PassWord = dr["PassWord"].ToString();
u.NickName = dr["NickName"].ToString();
u.Sex = Convert.ToBoolean(dr["Sex"]);
u.Birthday = Convert.ToDateTime(dr["Birthday"]);
u.Nation = dr["Nation"].ToString();
u.Class = dr["Class"].ToString(); list.Add(u);
}
conn.Close();
return list;
}
/// <summary>
/// 判断是否有此用户名
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public bool select(string username)
{
bool has = false;
cmd.CommandText = "select *from Users where UserName = @a";
cmd.Parameters.Clear();
cmd.Parameters.Add("@a", username); conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
has = true; conn.Close();
return has;
}
/// <summary>
/// 删除信息
/// </summary>
/// <param name="uname"></param>
public bool Delete(string uname)
{
bool ok = false;
int count = ;
cmd.CommandText = "delete from Users where UserName = @a";
cmd.Parameters.Clear();
cmd.Parameters.Add("@a", uname);
try
{
conn.Open();
count = cmd.ExecuteNonQuery();
}
catch { ok = false; }
finally
{
conn.Close();
} if (count > )
ok = true; return ok;
}
/// <summary>
/// 修改信息
/// </summary>
/// <param name="uname"></param>
/// <returns></returns>
public bool Update(string uname,string uname1,string uname2)
{
bool ok = false;
int count = ;
cmd.CommandText = "update Users set "+uname1+"=@b where UserName = @a";
cmd.Parameters.Clear();
cmd.Parameters.Add("@a", uname);
cmd.Parameters.Add("@b", uname2);
try
{
conn.Open();
count = cmd.ExecuteNonQuery();
}
catch { ok = false; }
finally
{
conn.Close();
} if (count > )
ok = true; return ok;
}
}
}

相当于把所有需要从数据库取数据进行操作的部分,统一放入此类中,使用时可以调用,这样可以简化主程序,并且看起来调理更加清晰。

注:

1、一般约定,在项目里新建一个叫做App_xx的文件夹,将实体类和数据访问类统一放在其中

2、一般实体类使用想要进行操作的数据库中的表名来命名,数据库访问类用此表的表名后面加上Data来命名

3、数据访问类开头格式:

class userdata
    {
        SqlConnection conn = null;
        SqlCommand cmd = null;         public userdata()
        {
            conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123");
            cmd = conn.CreateCommand();
        }

4、匿名方法

List<Users> ulist = new UsersData().Select();

直接使用UserData类中的Select方法(查询表中所有数据),并赋值给叫做ulist的泛型集合,从而比较简便的获取到所有数据,节省代码

有些方法也可以不用赋值直接进行调用

 if (new userdata().select(uname))
综合练习
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 增删改查.app_ado; namespace 增删改查
{
class Program
{
static void Main(string[] args)
{
#region//输出列表信息
Console.WriteLine("========================列表信息============================");
Console.Write("编号" + "\t" + "用户名" + "\t" + "密码" + "\t" + "昵称" + "\t" + "性别" + "\t" + "出生日期" + "\t" + "民族" + "\t" + "班级" + "\n");
new userdata().select();
#endregion
Console.WriteLine("1.添加");
Console.WriteLine("2.删除");
Console.WriteLine("3.修改");
Console.WriteLine("4.查询");
Console.WriteLine("5.退出");
for (; ; )
{
Console.Write("请选择您要进行的操作编号:");
int bian = int.Parse(Console.ReadLine());
//增加信息
if (bian == )
{
users user = new users();
Console.Write("请输入用户名:");
user.UserName = Console.ReadLine();
Console.Write("请输入密码:");
user.PassWord = Console.ReadLine();
Console.Write("请输入昵称:");
user.NickName = Console.ReadLine();
Console.Write("请输入性别:");
user.Sex = Convert.ToBoolean(Console.ReadLine());
Console.Write("请输入生日:");
user.Birthday = Convert.ToDateTime(Console.ReadLine());
Console.Write("请输入民族:");
user.Nation = Console.ReadLine();
Console.Write("请输入班级:");
user.Class = Console.ReadLine();
userdata ud = new userdata();
bool isok = ud.Insert(user);
if (isok)
Console.WriteLine("添加成功!");
else
Console.WriteLine("添加失败!");
}
//删除信息
else if (bian == )
{
Console.Write("请输入要删除的用户名:");
string uname = Console.ReadLine(); if (new userdata().select(uname))
{
List<users> ulist = new userdata().Select(uname);
foreach (users uuu in ulist)
{
Console.WriteLine(uuu.Ids + " " + uuu.UserName + " " + uuu.PassWord + " " + uuu.NickName + " " + uuu.Sex + " " + uuu.Birthday + " " + uuu.Nation + " " + uuu.Class);
}
Console.WriteLine("以上为此用户信息,是否要删除?(Y/N)");
string yn = Console.ReadLine();
if (yn.ToUpper() == "Y")
{
new userdata().Delete(uname);
Console.WriteLine("删除成功!");
}
}
else
Console.WriteLine("未找到此用户名!");
}
//修改信息
else if (bian == )
{
Console.Write("请输入要修改的用户名:");
string uname = Console.ReadLine(); if (new userdata().select(uname))
{
Console.Write("请输入要修改的列名:");
string uname1 = Console.ReadLine();
Console.Write("请输入要修改的内容:");
string uname2 = Console.ReadLine();
List<users> ulist = new userdata().Select(uname);
foreach (users uuu in ulist)
{
Console.WriteLine(uuu.Ids + " " + uuu.UserName + " " + uuu.PassWord + " " + uuu.NickName + " " +((bool)uuu.Sex?"男":"女")+ " " + ((DateTime)uuu.Birthday).ToShortDateString() + " " + uuu.Nation + " " + uuu.Class);
}
Console.WriteLine("以上为此用户信息,是否要修改?(Y/N)");
string yn = Console.ReadLine();
if (yn.ToUpper() == "Y")
{
new userdata().Update(uname, uname1, uname2);
Console.WriteLine("修改成功!");
}
}
else
Console.WriteLine("未找到此用户名!"); }
else if (bian == ) //也可以调用 public List<users> Select(string lname,string username) 通过 输入列名 和此列名下的内容 来进行查询
{
Console.Write("请输入要查询的用户名:");
string uname = Console.ReadLine();
if (new userdata().select(uname))
{
List<users> ulist = new userdata().Select(uname);
foreach (users uuu in ulist)
{
Console.WriteLine(uuu.Ids + " " + uuu.UserName + " " + uuu.PassWord + " " + uuu.NickName + " " + ((bool)uuu.Sex ? "男" : "女") + " " + ((DateTime)uuu.Birthday).ToShortDateString() + " " + uuu.Nation + " " + uuu.Class);
}
}
else
Console.WriteLine("未找到此用户名!");
}
else if (bian == )
break;
else
Console.WriteLine("请输入正确的操作编号!!");
} Console.ReadLine(); }
}
}

 

ADO.net 实体类 、数据访问类的更多相关文章

  1. ado.net 实体类_数据访问类

    实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  2. ADO,NET 实体类 和 数据访问类

    啥也不说,看代码. --SQl中 --建立ren的数据库,插入一条信息 create database ren go use ren go create table xinxi ( code ) pr ...

  3. ADO.NET(完整修改和查询、实体类,数据访问类)

    一.完整修改和查询 在编写c#语句时需考虑到用户体验,例如在编写修改语句时,需要考虑到输入的内容在数据库中是否能够找到. 中间变量运用. 1.先查 2.执行操作 完整修改语句: bool has = ...

  4. ADO.NET 【实体类】【数据访问类】

    认识分层结构,分层式结构是最常见,也是最重要的一种结构. 三层架构(3-tier architecture) 界面层(User Interface layer) 主要对用户的请求接受,以及数据的返回, ...

  5. 【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)

    开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类, ...

  6. 9_13学习完整修改和查询&&实体类,数据访问类

    完整修改和查询:中间变量运用. 1.先查 2.执行操作 ---------------------------------------------------- namespace ADO.NET_小 ...

  7. ADO.NET(一) 空间 ADO.NET结构 命名空间(车延禄) System.Data—— 所有的一般数据访问类 S(转载)

    ADO.NET(一) 空间   ADO.NET结构 命名空间(车延禄)System.Data—— 所有的一般数据访问类System.Data.Common—— 各个数据提供程序共享(或重写)的类Sys ...

  8. ADO.NET 数据访问类查询、属性扩展

    今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...

  9. 【2017-04-20】Sql字符串注入式攻击与防御,实体类,数据访问类

    字符串攻击 所谓sql字符串注入式攻击就是在用户输入界面输入通过精心编制的含有某种指令的字符串,来改变C#中连接数据库要执行的sql语句,从而对数据库进行攻击性操作 在用户输入界面输入  a');up ...

随机推荐

  1. Lazarus解决无法识别中文路径的方法

    procedure TForm1.Button1Click(Sender: TObject); var FileN:string; begin if self.OpenDialog1.Execute ...

  2. StartSSL免费证书申请笔记

    第一步:申请startssl账号 填写相应信息后,你所填写的邮箱会收到邮件 里面有一个用来验证的验证码 输入得到的.... 注册成功后会安装数字证书(注意:注册过程中没有叫输入账号密码,这也是通过证认 ...

  3. Simple Web Example

    eclipse3.7 运行一个简单的servlet,Target Platfrom 必要的jar为 0 ACTIVE      org.eclipse.osgi_3.7.2.v20120110-141 ...

  4. 支持4G以上文件的MD5单元

    根据网上一个流传很久的基于Delph4的MD5单元修改的, 可以支持4G以上的文件, 可以支持UNICODE字符的Delphi 恩.......对于大文件速度稍微慢了一点点, 在我自己的电脑上测试, ...

  5. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  6. mysql慢查询

    查看当前服务器是否开启慢查询: 1.快速办法,运行sql语句show VARIABLES like "%slow%" 2.直接去my.conf中查看. my.conf中的配置(放在 ...

  7. qt cef嵌入web

    原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium Embedded Fra ...

  8. Python排列组合实验

    import itertools 排列: 4个数内选2个 >>> print list(itertools.permutations([1,2,3,4],2)) [(1, 2), ( ...

  9. angularJS自定义指令scope代替link

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. 查询数据表,去除符合某些条件的记录,没有自动增长列(not exists)

    select distinct ccode,isnull(cexch_name,''),N'',N'',N'2014.03',0,1,1,1,12 from RP_bankrecp where not ...