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