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

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

实体类:

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. P1443 马的遍历

    同样是一个bfs水题... #include <bits/stdc++.h> using namespace std; typedef pair<int, int> St; S ...

  2. Android@Home Apple HomeKit

    Android@Home采用基于IEEE802.15.4标准的低功耗个域网协议的ZigBee技术,其是低功耗.低成本及低延迟.标准功率下可满足100米范围内的信号覆盖,并拥有三级安全模式,防止非法获取 ...

  3. WeakHashMap 理解笔记

    An entry in a WeakHashMap will automatically be removed when its key is no longer in ordinary use. M ...

  4. Android笔记:gson处理多层嵌套的复杂形式的json

    当一个Class的字段属性中包含另一个class时gson能正常处理吗? 最初看到网上有说使用static的说法 经验证是不需要的 直接当普通类来用就可以了. 直接使用gson.fromJson方法即 ...

  5. LightOj 1163 - Bank Robbery(x-x/10 = n求所有的 x )

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1163 题意:有一个数A,然后去掉A的最后一位得到B,先告诉你A-B的值,求所有满足条件 ...

  6. zero3- JPA http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html

    1.很好的博客:http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html 2. 最新的搬到github : http://holb ...

  7. 有了JSON.stringify(),处理json将变得更简单!!

    之前处理json 需要拼接json字符串,但是,如果用上JSON.stringify()的话,忘了json语法以没关系了..... @{ ViewBag.Title = "GetStr&qu ...

  8. Apple Developer Program Roles Overview

    Apple Developer Program Roles Overview There are three roles that can be assigned to Apple Developer ...

  9. Change Tracking of SQLServer

    1.Enable the change tracking at the database level. ALTER DATABASE AdventureWorks2008 SET CHANGE_TRA ...

  10. C#事务相关

    之前在程序中用到事务时,都是在存储过程中创建事务来对数据进行控制,其实在C#中也有事务类. 1.DbTransaction类对数据库访问添加事务,它是对数据库事务操作的基类,继承此类的有:   Sys ...