标签:tcp网络通信
本文主要探讨,客户端如何通过TCP通信,根据分页信息从服务器获取到相关数据
通常情况下,数据可能很多,比如几千或者几万条,并不适合一次性从服务器获取。
我们只从服务器获取当前页的数据 和数据库中记录总数以便我们可以在客户端计算出页数 ,当用户点击“上一页”或者“下一页”时,再获取相应页的数据
如下图:
双击上图中的某一项,再打开详细页面,如下图:
下面我们从头开始创建一个分页显示的Demo
通信框架采用来自英国开源的networkcomms2.3.1版本
数据库为sql2005
第一步,在数据库中建表
Create Table PlDocs( ID int identity(1000,1) primary key, Title nvarchar(200), Description nvarchar(500))
ID 是流水号 主键
Title 公文名称
Description 公文的详细描述
第二步:打开 vs 2010 创建工程文件
为了简单,基于上一篇文章 基于TCP通信的客户端断线重连 创建的工程文件继续
添加2个新类库
第三步:打开CodeSmith模板 创建相关的“存储过程”,数据层代码 逻辑层代码 模板从此文中下载 【模板下载】分享我所使用的数据库框架
(1):第一个模板的生成的存储过程如下:
存储过程
大家可以看到上面自动生成的存储过程中,包含分页存储过程,就是这一个,后面我们会用到
CREATE PROCEDURE [dbo].PlDocs_SelectPage-- Author: msdc-- Created: 2015-2-28-- Last Modified: 2015-2-28@PageNumber int,@PageSize intASDECLARE @PageLowerBound intDECLARE @PageUpperBound intSET @PageLowerBound = (@PageSize * @PageNumber) - @PageSizeSET @PageUpperBound = @PageLowerBound + @PageSize + 1CREATE TABLE #PageIndex ( IndexID int IDENTITY (1, 1) NOT NULL, ID Int)BEGININSERT INTO #PageIndex ( ID )SELECT [ID] FROM [dbo].[PlDocs] -- WHERE-- ORDER BYENDSELECT t1.* FROM [dbo].[PlDocs] t1JOIN #PageIndex t2ON t1.[ID] = t2.[ID] WHERE t2.IndexID > @PageLowerBound AND t2.IndexID < @PageUpperBound ORDER BY t2.IndexIDDROP TABLE #PageIndexGOSET ANSI_NULLS OFF GOSET QUOTED_IDENTIFIER OFF GO
PageNumber 是第几页
PageSize 是每页显示多少条
(2):继续使用模板生成数据层 (生成的数据层代码 与第一步生成的存储过程 是自动关联的)(命名空间需要手动改一下)
数据层代码
数据层还用到了基本SQL 操作类,每次使用复制过来即可
(3):继续使用模板生成逻辑层代码
逻辑层中有2个类:(命名空间需要手动改一下)
实体类
操作类
至此,模板的工作完成,工程文件目前的状态如下:
在逻辑层中添加2个契约类,用于客户端与服务器端的通信 (序列化方法使用protobuf.net)
PageInfoContract 当前是第几页 每页显示多少条
根据信息获取到的公文
客户端相关代码:
客户端相关代码
服务器端相关代码:
NetworkComms.AppendGlobalIncomingPacketHandler<PageInfoContract>("GetAllDocs", IncomingGetAllDocs);
IncomingGetAllDocs
数据操作类和存储过程,本Demo中不需要再修改。
如果您的使用环境中,增加了关键字或者类别的设定,数据操作类和存储过程需要进行相关的修改.
到这里 示例就完成了 我们看一下界面:
标签:tcp网络通信
原文地址:http://3008576.blog.51cto.com/2998576/1615927