如何在每次db事务之后更新所有客户端

时间:2010-07-29 07:33:24

标签: sql-server-2005 client-server

alt text http://i27.tinypic.com/24d4pw3.jpg

我正在使用WPF,SQL-Server和WCF开发基于客户端 - 服务器的应用程序。这基本上是一种POS应用程序(不使用任何POS库,但功能几乎相同)。服务器端编码几乎完成。现在我转向客户端编码。我是WCF(WCF上的第一个应用程序)和Client-Server架构的新手,所以在开始编码之前,我有些疑惑。 根据我的客户(人),他应该能够从客户端计算机和服务器打印项目销售账单(备忘录)。每个备忘录应该有一个备忘录用于该交易,该备忘录应自动增加,销售人员应该能够看到他将使用哪个备忘录。因此,为此,我在Application Sales Windows上添加了一个Memo No字段,该字段将显示数据库中的Memo No(Last Memo No + 1)。

出现问题,假设有3个销售柜台,当销售员打开各自的销售窗口进行计费时,他们都会看到(最后的备忘录号+ 1)。如果其中3个同时收费,那么3个不同的交易将存储相同的备忘录。

我必须告诉你,我在数据库中有2个表来存储销售。表1存储折扣,总计,推销员ID和备注没有,表2存储备忘录,项目代码,数量,账单日期等。因此,其备注没有绑定两个表格,如果这被操纵,那么你就知道它可以在月度报告中创建什么混乱。

这种情况溢满了我的大脑并来到这里寻求解决方案。我能做些什么来克服这一点。任何建议,链接,代码都会非常有用。

1 个答案:

答案 0 :(得分:0)

您可以考虑修改您的设计,以便在客户开始销售时分配备忘录编号。

实现此目的的一种方法是使用另一个表来存储备忘录号序列:

CREATE TABLE MemoSequence
(MemoId int identity(1,1),
 DateAssigned datetime
)

每次在客户端上打开销售窗口时,应将当前日期/时间插入MemoSequence.DateAssigned,并返回相应的MemoId值(使用OUTPUT子句或SCOPE_IDENTITY())客户端作为MemoId。

这样,每个客户端都会获得一个从事务开始时分配的唯一备忘录编号。

注意 - 如果要求备忘录序列中没有间隙,这可能不是一个合适的解决方案。