客户端向服务器请求数据,服务器返回一个记录集,客户端如何显示出来呢?

时间:2021-10-30 09:02:06
客户端远程访问服务器数据库,但是通过winsock或者其他控件,比如:   
  客户端发送信息:"select   *   from   xxx"   
  那么服务器端返回的是一个记录集recordset.   
  1、服务器端如何发送?   
  2、客户端使用datagrid如何显示出来呢?   
    
  谢谢了!
用xml吗?用字符串,如果一个数据集有上万条记录,那服务器怎么返回啊?大家在开发系统时,都是用的什么技术?给个例子!谢谢! 
服务器操作完成,要向客户端发回成功确认一下!怎么?实时吗? 

12 个解决方案

#1


用二进制打包发送。具体可参考相关资料。

#2


如果是内部网络的话  
为什么不考虑在连接的字符串中 在服务器的代码 用IP地址进行连接呢?
这样连接起来就和本地端毫无差别

如果数据量很大  反映的速度会有一定的影响!

#3


我觉得用XML比较好,字符串没有数据格式的.
我用的是ADO,但是在互联网上传输海量数据也是个问题.
我的做法是:
服务端只传送更新过的数据,在客户端也建立个库,固定时间(如闲时更新);

#4


1楼,说的太简单了吧?资料并不好找?!能举例说明吗?

#5


1楼,说的太简单了吧?资料并不好找?!能举例说明吗?
2楼,我也考虑过,但直接连接,在客户端往服务器里更新数据时,怎么确定已经更新完毕,数据更新要求很高,必须确认才行的!
3楼,我现在的做法就是在客户端放一个mdb,服务器用sql,请问这两个同步时,怎么更便捷,只更新更新过的!有更新时间字段,要一个一个比较啊?


谢谢大家!请大家帮忙!

再问个问题,数据库存储过程有没有工具来写,要不那么多表,一个一个的写存储过程那不得累死?!你们是怎么实现的?

#6


'服务端将记录集转化为二进制发送
Public Function RecordsetToBimary(rs As Recordset) As Byte()

    Dim stm As Stream
    Set stm = New Stream
    stm.Open
    stm.Type = adTypeBinary
    rs.Save stm, adPersistADTG
    stm.Position = 0
    RecordsetToBimary = stm.Read()
    Set stm = Nothing
    
End Function

'客户端将二进制转化为记录集
Private Function BimaryToRecordset(vData() As Byte) As Recordset
    
    Dim stm As Stream
    Dim rs As Recordset
    Set stm = New Stream
    stm.Open
    stm.Type = adTypeBinary
    stm.Write vData
    stm.Position = 0
    Set rs = New Recordset
    rs.Open stm
    Set BimaryToRecordset = rs
    Set rs = Nothing
    Set stm = Nothing
    
End Function

当然具体情况比较复杂,要返回大数据量,要处理好分包

#7


用XML好些吧,海量数据真的不知道什么样...
存储过程的问题,可以写一个解析语句的东东呀,为什么要一个一个地写呢?

#8


我也考虑过,但直接连接,在客户端往服务器里更新数据时,怎么确定已经更新完毕,数据更新要求很高,必须确认才行的! 
--------------
局域网通常应该不用考虑winsock,C/S或B/S模式比较好,当然要根据你的实际需求
判断更新完毕也不是什么难事,比如用ADO的exceute方法添加,删除,修改和更新数据表,有返回参数说明操作所影响的行数,更何况VB下,更新没有完成你几乎不可能去执行后面的代码,担心多余

#9


我是这么考虑的,你看可以吗?我用winsock,在客户端有mdb数据库,在更新时用winsock发送数据,同时mdb存储当前数据.服务器接受并添加完毕,发送"ok",这时客户端检测到就删除存在mdb中的数据,如果没收到"ok",等过5分钟再发送!你看可以吗?vbman2003?
再问个问题,数据库存储过程有没有工具来写,要不那么多表,一个一个的写存储过程那不得累死?!你们是怎么实现的?
根据需要自己动手写啊?能介绍本存储过程的好书吗?资料?
谢谢

#10


对于一般的应用,通常情况下,不用考虑客户端再附加一个数据库,在满足需求的情况下,我个人认为越简单越好。你所描述的情况看,本地数据库应该是多余的
存储过程只能一个个写,没有好方法,至少我不知道有什么简便的方法,呵呵。存储过程的效率应该是比较好的,VB中调用也是很方便的

#11


谢谢

#12


还有返回大数据量的问题,尽可能的用分页,太大的数据量,通常在客户端没什么可操作性,试想一下你一下返回数千数万的数据,客户怎么浏览......

#1


用二进制打包发送。具体可参考相关资料。

#2


如果是内部网络的话  
为什么不考虑在连接的字符串中 在服务器的代码 用IP地址进行连接呢?
这样连接起来就和本地端毫无差别

如果数据量很大  反映的速度会有一定的影响!

#3


我觉得用XML比较好,字符串没有数据格式的.
我用的是ADO,但是在互联网上传输海量数据也是个问题.
我的做法是:
服务端只传送更新过的数据,在客户端也建立个库,固定时间(如闲时更新);

#4


1楼,说的太简单了吧?资料并不好找?!能举例说明吗?

#5


1楼,说的太简单了吧?资料并不好找?!能举例说明吗?
2楼,我也考虑过,但直接连接,在客户端往服务器里更新数据时,怎么确定已经更新完毕,数据更新要求很高,必须确认才行的!
3楼,我现在的做法就是在客户端放一个mdb,服务器用sql,请问这两个同步时,怎么更便捷,只更新更新过的!有更新时间字段,要一个一个比较啊?


谢谢大家!请大家帮忙!

再问个问题,数据库存储过程有没有工具来写,要不那么多表,一个一个的写存储过程那不得累死?!你们是怎么实现的?

#6


'服务端将记录集转化为二进制发送
Public Function RecordsetToBimary(rs As Recordset) As Byte()

    Dim stm As Stream
    Set stm = New Stream
    stm.Open
    stm.Type = adTypeBinary
    rs.Save stm, adPersistADTG
    stm.Position = 0
    RecordsetToBimary = stm.Read()
    Set stm = Nothing
    
End Function

'客户端将二进制转化为记录集
Private Function BimaryToRecordset(vData() As Byte) As Recordset
    
    Dim stm As Stream
    Dim rs As Recordset
    Set stm = New Stream
    stm.Open
    stm.Type = adTypeBinary
    stm.Write vData
    stm.Position = 0
    Set rs = New Recordset
    rs.Open stm
    Set BimaryToRecordset = rs
    Set rs = Nothing
    Set stm = Nothing
    
End Function

当然具体情况比较复杂,要返回大数据量,要处理好分包

#7


用XML好些吧,海量数据真的不知道什么样...
存储过程的问题,可以写一个解析语句的东东呀,为什么要一个一个地写呢?

#8


我也考虑过,但直接连接,在客户端往服务器里更新数据时,怎么确定已经更新完毕,数据更新要求很高,必须确认才行的! 
--------------
局域网通常应该不用考虑winsock,C/S或B/S模式比较好,当然要根据你的实际需求
判断更新完毕也不是什么难事,比如用ADO的exceute方法添加,删除,修改和更新数据表,有返回参数说明操作所影响的行数,更何况VB下,更新没有完成你几乎不可能去执行后面的代码,担心多余

#9


我是这么考虑的,你看可以吗?我用winsock,在客户端有mdb数据库,在更新时用winsock发送数据,同时mdb存储当前数据.服务器接受并添加完毕,发送"ok",这时客户端检测到就删除存在mdb中的数据,如果没收到"ok",等过5分钟再发送!你看可以吗?vbman2003?
再问个问题,数据库存储过程有没有工具来写,要不那么多表,一个一个的写存储过程那不得累死?!你们是怎么实现的?
根据需要自己动手写啊?能介绍本存储过程的好书吗?资料?
谢谢

#10


对于一般的应用,通常情况下,不用考虑客户端再附加一个数据库,在满足需求的情况下,我个人认为越简单越好。你所描述的情况看,本地数据库应该是多余的
存储过程只能一个个写,没有好方法,至少我不知道有什么简便的方法,呵呵。存储过程的效率应该是比较好的,VB中调用也是很方便的

#11


谢谢

#12


还有返回大数据量的问题,尽可能的用分页,太大的数据量,通常在客户端没什么可操作性,试想一下你一下返回数千数万的数据,客户怎么浏览......