码迷,mamicode.com
首页 > 其他好文 > 详细

客户端通过TCP通信分页从服务器获取数据

时间:2015-02-28 18:56:56      阅读:174      评论:0      收藏:0      [点我收藏+]

标签: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通信分页从服务器获取数据

标签:tcp网络通信

原文地址:http://3008576.blog.51cto.com/2998576/1615927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!