六、DBHelper(下)、分层架构、配置文件读取

1.DBHelper升级

【Account类】

namespace AdoNet_07
{
    /// <summary>
    /// 银行账号(数据模型)
    /// </summary>
    public class Account
    {
        public string CardId { get; set; }//卡号
        public string Pwd { get; set; }//密码
        public string Name { get; set; }//姓名
        public double UserMoney { get; set; }//存款
        public string TelePhone { get; set; }//电话
    }
}

【DBHelper类】

using System.Data.SqlClient;
using System.Data;


namespace AdoNet_07
{
    /// <summary>
    /// 数据库帮助类(使用工具类),里面的内容最好写成静态的
    /// 也有的程序员会写成SQLHelper
    /// 添加、删除、修改、查询的通用方法
    /// </summary>
    public static class DBHelper
    {
        private static string connStr = "server=.;uid=sa;pwd=你的密码;database=BankDB";
        /// <summary>
        /// 返回受影响的行数
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string sql,params SqlParameter[] paras)//sql:预留窗口  params:可选参数标识(只支持一维数组)
        {
            int result = -1;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                SqlCommand command = new SqlCommand(sql, conn);
                command.Parameters.AddRange(paras);
                result = command.ExecuteNonQuery();                
            }
            return result;//返回受影响的行数
        }

        /// <summary>
        /// 返回一行一列
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static object ExecuteScalar(string sql,params SqlParameter[] paras)
        {
            object result = -1;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                SqlCommand command = new SqlCommand(sql, conn);
                command.Parameters.AddRange(paras);
                result = command.ExecuteScalar();//返回第一行第一列
            }
            return result;
        }

        /// <summary>
        /// 执行返回游标对象(可以使用循环返回对行多列的数据)
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] paras)
        {
            //游标对象不能够释放,要一直使用,所以不能够用using
            SqlConnection conn = new SqlConnection(connStr);
            conn.Open();
            SqlCommand command = new SqlCommand(sql, conn);
            command.Parameters.AddRange(paras);
            SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);//从数据库中只读只进一行数据
            //CommandBehavior.CloseConnection  执行关闭游标对象时,顺带关闭数据库的连接
            return reader;//返回一个游标对象
        }

        /// <summary>
        /// 查询、返回一个临时表
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static DataTable GetDataTable(string sql,params SqlParameter[] paras)
        {
            DataTable dt = new DataTable();//存放数据的容器
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand command = new SqlCommand(sql, conn);
                command.Parameters.AddRange(paras);
                SqlDataAdapter adapter = new SqlDataAdapter(command);//数据适配器
                adapter.Fill(dt);
            }
            return dt;
        }

        /// <summary>
        /// 查询、返回一个数据集
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="paras"></param>
        /// <returns></returns>
        public static DataSet GetDataSet(string sql, params SqlParameter[] paras)
        {
            DataSet ds = new DataSet();//存放数据的容器
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand command = new SqlCommand(sql, conn);
                command.Parameters.AddRange(paras);
                SqlDataAdapter adapter = new SqlDataAdapter(command);//数据适配器
                adapter.Fill(ds);
            }
            return ds;
        }
    }
}

【AccountManager类】

using System.Data.SqlClient;//访问sqlserver数据库的命名空间
using System.Data;

namespace AdoNet_07
{
    /// <summary>
    /// 银行账号的业务类
    /// </summary>
    public class AccountManager
    {
        /// <summary>
        /// 系统界面
        /// </summary>
        public void InitView()
        {
            Console.WriteLine("==========================欢迎进入中国邮政储蓄银行ATM机系统==========================");
            //创建一个账户
            Account account = new Account();
            Console.WriteLine("请输入您的银行卡号:");
            account.CardId = Console.ReadLine();
            Console.WriteLine("请输入您的银行密码:");
            account.Pwd = Console.ReadLine();

            Account loginAccount = Login(account);
            if (loginAccount != null)
            {
                Console.WriteLine($"欢迎{loginAccount.Name}(卡号:{loginAccount.CardId})登陆!");
            }
            else
            {
                Console.WriteLine("卡号或密码错误!!");
            }
        }

        /// <summary>
        /// 登陆账户
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        public Account Login(Account account)
        {
            Account loginAccount = null;

            string sql = $@"select CardId,[Name],UserMoney from Account
                             where CardID = @cardid and Pwd = @pwd";
            SqlParameter[] paras = {
                    new SqlParameter("@cardid", account.CardId),
                    new SqlParameter("@pwd", account.Pwd)
            };

            using (SqlDataReader reader = DBHelper.ExecuteReader(sql, paras))
            {
                //reader.Read()执行前进(下一行)
                if (reader.Read())
                {
                    loginAccount = new Account();//创建对象,分配内存
                    loginAccount.CardId = reader["cardId"].ToString();
                    loginAccount.Name = reader["Name"].ToString();
                    loginAccount.UserMoney = Convert.ToDouble(reader["UserMoney"]);
                }
            }//CommandBehavior.CloseConnection  执行关闭游标对象时,顺带关闭数据库的连接  
            return loginAccount;
        }

        /// <summary>
        /// 删除账户
        /// </summary>
        public void DeleteAccount()
        {
            string sql = $@"delete from Account where CardID = @cardid";
            SqlParameter[] paras =
            {
                new SqlParameter("@cardid",10005)
            };
            int result = DBHelper.ExecuteNonQuery(sql, paras);
            if (result > 0)
            {
                Console.WriteLine("删除成功!");
            }
            else
            {
                Console.WriteLine("删除失败!");
            }
        }

        /// <summary>
        /// 添加账户
        /// </summary>
        public void AddAccount()
        {
            string sql = $@"insert into Account
                        values('10006','888888','jhon',12000,'1566855475')";
            int result = DBHelper.ExecuteNonQuery(sql);
            if (result > 0)
            {
                Console.WriteLine("添加成功!");
            }
            else
            {
                Console.WriteLine("添加失败!");
            }
        }

        /// <summary>
        /// 统计开户人员
        /// </summary>
        public void AcoountCount()
        {
            string sql = "select count(cardid) from Account";
            int result = (int)DBHelper.ExecuteScalar(sql);
            Console.WriteLine($"银行系统中的总人数:{result}");
        }

        /// <summary>
        /// 根据卡号获取用户名
        /// </summary>
        public string GetNameByCardId(int cardId)
        {
            string sql = "select name from Account where cardid=@cardid";
            SqlParameter[] paras =
            {
                new SqlParameter("@cardid",cardId)
            };
            return DBHelper.ExecuteScalar(sql, paras).ToString();
        }


        /// <summary>
        /// 获取所有的开户人信息
        /// </summary>
        public List<Account> GetAccountList()
        {
            List<Account> list = new List<Account>();//泛型集合,用于存放多个账户

            string sql = "select cardid,name,usermoney,telephone from Account";
            using (SqlDataReader reader = DBHelper.ExecuteReader(sql))
            {
                //reader.Read()执行前进(下一行)
                while (reader.Read())
                {
                    Account account = new Account();//创建对象,分配内存
                    account.CardId = reader["cardId"].ToString();
                    account.Name = reader["Name"].ToString();
                    account.UserMoney = Convert.ToDouble(reader["UserMoney"]);
                    account.TelePhone = reader["telephone"].ToString();
                    list.Add(account);//把对象循环添加到集合
                }
            }
            return list;
        }        
        /// <summary>
        /// 显示账号信息(多行多列)
        /// </summary>
        public void ShowAccountList()
        {
            Console.WriteLine("==========================目前已经开户的人员列表==========================");

            List<Account> list = GetAccountList();
            foreach (Account account in list)
            {
                Console.WriteLine($"卡号:{account.CardId},姓名:{account.Name},余额:{account.UserMoney},电话:{account.TelePhone}");
            }
        }

        /// <summary>
        /// 获取转账信息
        /// </summary>
        /// <returns></returns>
        public DataTable GetAccountRecord()
        {
            string sql = @"select PayAccount,a.Name PayName,ReceiveAccount,b.Name ReceiveName,TransferMoney,CreateTime,Remark
                            from AccountRecord c
                            left join Account a
                            on(a.CardID=c.PayAccount)
                            left join Account b
                            on(b.CardID=c.ReceiveAccount)";
            return DBHelper.GetDataTable(sql);
        }
        /// <summary>
        /// 显示转账信息
        /// </summary>
        public void ShowAccountRecord()
        {
            Console.WriteLine("==========================转账信息==========================");
            DataTable dt_AccountRecord = GetAccountRecord();
            foreach (DataRow row in dt_AccountRecord.Rows)
            {
                Console.WriteLine($"支付账号:{row["PayAccount"]},付款人姓名:{row["PayName"]}" +
                    $"收款账号:{row["ReceiveAccount"]},收款人姓名:{row["ReceiveName"]}" +
                    $"转账金额:{row["TransferMoney"]}" +
                    $"创建时间:{row["CreateTime"]},备注:{row["Remark"]}");
            }
        }

    }
}

【调用】

namespace AdoNet_07
{
    class Program
    {
        static void Main(string[] args)
        {
            AccountManager accountManager = new AccountManager();
            //accountManager.InitView();
            //accountManager.AcoountCount();
            //string name = accountManager.GetNameByCardId(10001);
            //Console.WriteLine(name);
            //accountManager.ShowAccountList();
            accountManager.ShowAccountRecord();

            Console.ReadLine();
        }
    }
}

【显示账户信系的结果】

【显示转账记录的结果】

 

2.分层架构(两层架构)

【案例】

①ABO_08 UI:显示层(UI、WEB、View)

(类库)ADO_08 DAL:数据访问层

(类库)TAOBAO.Models:辅助层(Models、Entity(实体))

【注】由于“显示层”要调用“数据访问层”,所以添加一个“辅助层”

【层与层之间的关系】

“显示层”要调用“数据访问层”:TAOBAO.UI项目引用类库ADO_08 DAL,并写using ADO_08_DAL;

分层的所有层都需要引用辅助层,并写using TAOBAO_08_Models;

【具体操作结果见TAOBAO(Ado_08 UI、Ado_08 DAL、Ado_08 Models)】

https://download.csdn.net/download/weixin_45406160/13455567

 

3.修改配置文件

【添加一个“属性”节点】可以写多个库

  <connectionStrings>
    <add name="connStr" connectionString="server=.;uid=sa;pwd=你的密码;database=BankDB"/>
  </connectionStrings>

【添加System.Configuration】

【在DBHelper中引入命名空间】using System.Configuration

using System.Configuration;

private static string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;//获取节点对象的属性

【添加一个“设置”节点】

  <appSettings>
    <add key="projectName" value="LZL银行系统"/>
    <add key="version" value="1.0"/>
  </appSettings>

【在 DBHelper 中使用 】

ConfigurationManager.AppSettings["projrectName"];

【ABO_08 UI  的配置文件App.cofig】

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="ConnStr" connectionString="server=.;uid=sa;pwd=你的密码;database=BankDB"/>
  </connectionStrings>
  <appSettings>
    <add key="projectName" value="LZL银行系统"/>
    <add key="version" value="1.0"/>
  </appSettings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值