站点图标 久久日记本

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

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 看起来这篇文章也是写了个半成品~_~

退出移动版