Skip to content
久久日记本
曾经年少爱追梦,一心只想往前飞
  • 首页
  • 博客
    • 博客历史
    • 主题
    • 个人文集
  • 关于
    • 正在读的书
    • 作品归档
    • 2018作品归档
    • 联系我
  • 友情链接
  • 留言板
❄
❅
❆
❄
❅
❆
❄
❅
❆
❄
.NET/Code

三层架构和WCF的应用(ing)

Posted on 2012年8月16日 by 九九 / 1222 Views

1、进销存系统
应用WCF和三层架构做一个进销存系统,总结一下顺序。
//1.定义Model
//2.定义IDAL
//3.定义 DAL
//3.1.生成sql语句
//3.2.执行sql语句
//3.3根据方法的返回值,返回结果
//4.定义BLLService
//4.1查询方法的参数与界面的控件相同
//5.定义界面
//5.1添加一个自定义控件
//5.2控件中拖放一个tabpage,实现标题的功能
//5.3添加查询条件
//5.4添加查询结果,使用datagridview,
//注意属性:AllowUsersToAddRows,AllowUsersToDeleteows,ColumnsHeadersDefaultCellStyle,MultiSelect,ReadOnly,SelectionMode

2、进销存系统新增商品

Model->SalesOrdersModel->
引用
 using System.ServiceModel;
 using System.Runtime.Serialization;
序列化属性信息{get;set;}
 //代码如下:
    [DataContract]
    public class SalesOrdersModel
    {
        [DataMember]public int ID { get; set; }
        [DataMember]public string OrderNumber { get; set; }
        [DataMember]public string CustomerName { get; set; }
        [DataMember]public string Tel { get; set; }
        [DataMember]public string Address { get; set; }
        [DataMember]public string Contract { get; set; }
    }
 ```

```csharp
 在Invoicing.IDAL中定义接口ISalesCommodityDAL->
 引用:
 using Invoicing.Model;
 定义方法名称:
     public interface ISalesOrdersDAL
    {
        List<SalesOrdersModel> GetSalesOrders(string sqlwhere);
        SalesOrdersModel GetOneSalesOrder(int id);
  SalesOrdersModel AddSalesOrder(SalesOrdersModel order);
    }
在DAL中实现接口的方法:
DAL->SalesOrderDAL:ISalesCommodityDAL
引用:
 using System.Data;
 using System.Data.OracleClient;//数据库操作
 using Invoicing.IDAL;//引用接口层
 using Invoicing.Model;//引用模型层
实现接口中的方法:
     public class SalesOrdersDAL : ISalesOrdersDAL
    {
        public List<SalesOrdersModel> GetSalesOrders(string sqlwhere)
        {
            string sql = string.Format("select * from SalesOrders wwhere 1=1 {0}", sqlwhere);
            List<SalesOrdersModel> list = new List<SalesOrdersModel>();
            using (OracleDataReader odr = OracleHelper.ExecuteReader(OracleHelper.ConnectionString, CommandType.Text, sql, null))
            {
                while (odr.Read())
                {
                    SalesOrdersModel salesOrder = new SalesOrdersModel();
                    salesOrder.ID = odr.GetInt32(0);
                    salesOrder.OrderNumber = odr.IsDBNull(1) ? "" : odr.GetString(1);
                    salesOrder.CustomerName = odr.IsDBNull(2) ? "" : odr.GetString(2);
                    salesOrder.Tel = odr.IsDBNull(3) ? "" : odr.GetString(3);
                    salesOrder.Address = odr.IsDBNull(4) ? "" : odr.GetString(4);
                    salesOrder.Contract = odr.IsDBNull(5) ? "" : odr.GetString(5);
                    salesOrder.Status = odr.IsDBNull(6) ? "" : odr.GetString(6);
                    salesOrder.OrderDate = odr.IsDBNull(7) ? DateTime.Now : odr.GetDateTime(7);

                    list.Add(salesOrder);

                }
                return list;
            }


        }
        public SalesOrdersModel GetOneSalesOrder(int id)
        {
            string sqlwhere = " and id=" + id.ToString();
            List<SalesOrdersModel> list = GetSalesOrders(sqlwhere);
            return list.SingleOrDefault(u => u.ID == id);
        }

  public SalesOrdersModel AddSalesOrder(SalesOrdersModel order)
        {
            order.ID = GetNewID();
            string sql = string.Format("insert into salesOrders(ID,OrderNumber,CustomerName,Tel,Address,Contract,Status,OrderDate) values({0},'{1}','{2}','{3}','{4}','{5}','{6}',to_date('{7}','yyyy-mm-dd'))",
                order.ID, order.OrderNumber, order.CustomerName, order.Tel, order.Address, order.Contract, order.Status, order.OrderDate.ToString("yyyy-MM-dd"));
            if (OracleHelper.ExecuteNonQuery(OracleHelper.ConnectionString, CommandType.Text, sql, null) > 0)
            {
                return order;
            }
            else
            {
                return null;
            }
        }
        private int GetNewID()
        {
            string sql = "select s_SalesOrders.nextval from dual";
            return int.Parse(OracleHelper.ExecuteScalar(OracleHelper.ConnectionString, CommandType.Text, sql, null).ToString());
        }
    }
在BLLService中新建WCF服务:SalesOrdersBLLService成功后有如下两个文件:
SalesOrdersBLLService.svc,ISalesOrdersBLLService.cs
->在ISalesOrdersBLLService.cs
引用
 using Invoicing.Model;
 using Invoicing.IDAL;
 using Invoicing.OracleDAL;

代码:
 {
     [ServiceContract]
    public interface ISalesOrdersBLLService
    {
  [OperationContract]
        SalesOrdersModel[] GetSalesOrders(string orderNumber,string orderDateLow,string orderDateHigh,string status);
        [OperationContract]//数据契约
        [FaultContract(typeof(Exception))]//错误契约
        SalesOrdersModel AddSalesOrder(string custonerName, string tel, string address, string contract);
    }
 }
->在SalesOrdersBLLService.svc
引用:
 using Invoicing.Model;
 using Invoicing.IDAL;
 using Invoicing.OracleDAL;

代码:
  public class SalesOrdersBLLService : ISalesOrdersBLLService
    {
              public SalesOrdersModel[] GetSalesOrders(string orderNumber, string orderDateLow, string orderDateHigh, string status)
        {
            string sqlwhere = "";
            if (orderNumber != "")
            {
                sqlwhere += string.Format(" and orderNumber like '%{0}%'", orderNumber);
            }
            if (orderDateLow != "")
            {
                try
                {
                    DateTime.Parse(orderDateLow);
                    sqlwhere += string.Format(" and OrderDate >=to_date('{0}','yyyy/mm/dd')", orderDateLow);
                }
                catch { throw new FaultException<Exception>(new Exception(), "订单时间格式有无!"); }
            }

            if (orderDateHigh != "")
            {
                try
                {
                    DateTime.Parse(orderDateHigh);
                    sqlwhere += string.Format(" and OrderDate >=to_date('{0}','yyyy/mm/dd')", orderDateHigh);
                }
                catch { throw new FaultException<Exception>(new Exception(), "订单时间格式有无!"); };
            }
            if (status != "")
            {
                sqlwhere += string.Format(" and status='{0}'", status);
            }

            ISalesOrdersDAL dal = new SalesOrdersDAL();
            return dal.GetSalesOrders(sqlwhere).ToArray();

        }
        public SalesOrdersModel AddSalesOrder(string custonerName,string tel,string address,string contract)
        {
            if (custonerName == "")
            {
                throw new FaultException<Exception>(new Exception(),"客户名称不能为空!");
            }
            if (tel == "")
            {
                throw new FaultException<Exception>(new Exception(), "电话不能为空!");
            }
            if (address == "")
            {
                throw new FaultException<Exception>(new Exception(), "送货地址不能为空!");
            }
            SalesOrdersModel neworder = new SalesOrdersModel();
            neworder.ID = 0;
            neworder.OrderNumber = "SALE" + DateTime.Now.ToString("yyyyMMddHHmmss");
            neworder.CustomerName = custonerName;
            neworder.Tel = tel;
            neworder.Address = address;
            neworder.Contract = contract;
            neworder.Status = "未出库";
            neworder.OrderDate = DateTime.Now;

            ISalesOrdersDAL dal = new SalesOrdersDAL();
            return dal.AddSalesOrder(neworder);
        }
    }

这样操作的代码就写好了,
在Invoicing.UI中添加服务引用SalesOrdersBLLService,修改命名空间为BLLSalesOrders

然后可以在UI层部署自己的调用代码。

DAL一个表一个DAL,
BLL他是一个业务逻辑一个服务。{一个业务逻辑包含着对多个表的操作}

注:2018-08-30 看起来这篇文章也是写了个半成品~_~

ASP.NET, MSSQL, 网新实训笔记
九九
过去的我们,现在的自己,往事,终会随风而逝。 View all posts by 九九 →

Post navigation

Older post
Oracle安装后出现如下错误java.lang.Exception: Exception in sending Request :: null
Newer post
HTML语言

标签云

2019ncov Android ASP.NET Baby C# C/C++ CSS Div DX11 flask front-end GAE Git Java JJProject JS Life MSSQL MVC OpenSource Oracle Python React React-Native Software Tools Vue Webpack Website Window WP7 乱记 十年旧梦 天气 宝宝成长日记 小说 工作 情感 故障 散文 日记 网新实训笔记 花落梧桐 诗间集 转载

时光机

  • 2023年3月
  • 2023年2月
  • 2022年12月
  • 2022年4月
  • 2022年3月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年5月
  • 2019年12月
  • 2019年10月
  • 2019年9月
  • 2019年6月
  • 2019年5月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年11月
  • 2017年10月
  • 2017年9月
  • 2017年7月
  • 2017年3月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年10月
  • 2016年7月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年8月
  • 2015年7月
  • 2015年4月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2014年5月
  • 2014年4月
  • 2014年3月
  • 2014年2月
  • 2014年1月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月
  • 2013年7月
  • 2013年6月
  • 2013年5月
  • 2013年4月
  • 2013年3月
  • 2013年1月
  • 2012年11月
  • 2012年10月
  • 2012年9月
  • 2012年8月
  • 2012年7月
  • 2012年6月
  • 2012年5月
  • 2012年4月
  • 2012年3月
  • 2012年2月
  • 2012年1月
  • 2011年12月
  • 2011年11月
  • 2011年10月
  • 2011年9月
  • 2011年8月
  • 2011年6月
  • 2011年5月
  • 2011年4月
  • 2011年3月
  • 2011年2月
  • 2010年12月
  • 2010年11月
  • 2010年10月
  • 2010年9月
  • 2010年8月
  • 2010年6月
  • 2010年5月
  • 2010年2月
  • 2010年1月
  • 2009年12月
  • 2009年11月
  • 2009年10月
  • 2009年9月
  • 2009年8月
  • 2009年7月
  • 2009年6月
  • 2009年5月
  • 2009年4月
  • 2009年3月
  • 2009年2月
  • 2009年1月
  • 2008年8月
  • 2008年6月
  • 2008年5月
  • 2008年4月
  • 2008年2月
  • 2007年11月
  • 2007年8月
  • 2007年6月
  • 2007年5月
  • 2007年4月
  • 2007年3月
  • 2007年2月
  • 2007年1月
  • 2006年10月
  • 2006年8月
© 2006 - 2023 久久日记本
Powered by WordPress | Theme: Graphy for 99diary