您的位置:程序门 -> vb -> 网络编程



能否使用winsock控件传送sql查询后的数据集给客户机?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


能否使用winsock控件传送sql查询后的数据集给客户机?[已结贴,结贴人:nhotnhot]
发表于:2007-01-30 17:21:55 楼主
请教各位老大,主机收到客户机sql查询字段后主机查询sql数据库,
然后怎么使用winsock连接回发这个数据集呢?

最好能有详细代码,小弟万分感谢!
发表于:2007-01-30 17:46:361楼 得分:20
给你个可以把记录集跟字节数组相互转换的函数,请引用ado。

public   function   rstobin(rs   as   recordset)   as   variant        

        dim   objstream       as   stream
       
        set   objstream   =   new   stream
       
        objstream.open
        objstream.type   =   adtypebinary
        rs.save   objstream,   adpersistadtg
        objstream.position   =   0
       
        rstobin   =   objstream.read()
       
        set   objstream   =   nothing
       
end   function

public   function   bintors(   vdata   as   variant)   as   recordset
       
        dim   objstream       as   stream
        dim   objrs               as   recordset
       
        set   objrs   =   new   recordset
        set   objstream   =   new   stream
       
        objstream.open
        objstream.type   =   adtypebinary
        objstream.write   vdata
        objstream.position   =   0
       
        objrs.open   objstream
       
        set   bintors   =   objrs
       
        set   objrs   =   nothing
        set   objstream   =   nothing
       
end   function
发表于:2007-01-30 17:49:152楼 得分:0
server                                         client
记录集—> 字节数组     <—   socket   —>   字节数组   —>   记录集
发表于:2007-01-30 19:02:053楼 得分:0
感谢阿花:
可我怎么不会用啊,能不能再详细点,
从server.winsock.send开始到
client.winsock.getdata

我可以再给分,再次感谢
发表于:2007-01-30 23:50:194楼 得分:20
举个例子。
客户端发送查询请求:
private   sub   command1_click()
       
        dim   strsql     as   string
       
        strsql   =   "select   *   from   employees "
       
        if   winsock1.state   =   sckconnected   then
                winsock1.senddata   strsql
                doevents
        end   if
       
end   sub

'   服务器收到查询请求并执行
private   sub   winsock1_dataarrival(byval   bytestotal   as   long)
       
        dim   strbuffer       as   string
        dim   arrdata()       as   byte
        dim   objrec             as   recordset
       
        winsock1.getdata   strbuffer,   vbstring
        set   objrec   =   getrecordset(strbuffer)                 '   执行接受到的查询,其中getrecordset方法执行sql语句并返回一记录集
        arrdata()   =   rstobin(objrec)                                   '   记录集转换成字节数组
        winsock1.senddata   arrdata                                       '   送回客户段
        doevents
       
end   sub

'   客户端收到响应
private   sub   winsock1_dataarrival(byval   bytestotal   as   long)
       
        dim   arrdata()       as   byte
        dim   objrec             as   recordset
       
        winsock1.getdata   arrdata,   vbarray   +   vbbyte
        set   objrec   =   bintors(arrdata)                               '   还原记录集
        set   datagrid1.datasource   =   objrec                       '   显示数据
       
end   sub

这些代码只是说明大致的方法,实际上接受数据时还要处理何时接受完成,接受完了以后才能还原成记录集。
发表于:2007-01-31 12:46:515楼 得分:0
感谢阿花,小弟向你致敬!
发表于:2007-09-22 10:08:376楼 得分:0
mark


快速检索

最新资讯
热门点击