远程数据传送方法讨论

heton 2003-05-26 01:59:29


之前做的一些系统中都涉及将本地数据上传到远程数据库服务器,或者将远程数据库服务器的数据下载的本地,都不知道用那种方式实现更方便,更安全,在此向大伙请教。

我曾经用这样的方式实现

在远程服务器写一个ASP文件接收数据如:

<%

If Request.ServerVariables("REQUEST_METHOD")="POST" Then
ON ERROR RESUME NEXT
Dim AttendArray
Dim ResStr
Set xmldom=Server.CreateObject("Microsoft.XMLDOM")
Set Obj=Server.CreateObject("SAS.SHIFT")
xmldom.load(Request)
Set Rs=Server.CreateObject("ADODB.Recordset")
Rs.Open xmldom
AttendArray=Rs.GetRows
If IsArray(AttendArray) Then
ResStr=Obj.AddAttendRecord(AttendArray)
End If
If Err.number =0 Then
Response.Write "OK"
Set xmlResult=Server.CreateObject("Microsoft.XMLDOM")
xmlResult.save(Response)
Set xmlResult=Nothing
Else
Response.Write "NO"
Set xmlResult=Server.CreateObject("Microsoft.XMLDOM")
xmlResult.save(Response)
Set xmlResult=Nothing
End If
End If
%>


客户端这样写的

Dim Url As String

Url = "http://" & ServerName & "/shift/AddAttendRecord.asp"

Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Strm As ADODB.Stream
Dim XMLHttp As XMLHTTPRequest
Dim ObjSas As InstantPassCls.clsSAS
Dim AttendArray As Variant
Dim i As Integer
Set rs = New ADODB.Recordset
Set ObjSas = New InstantPassCls.clsSAS
AttendArray = ObjSas.GetUploadRecord

If IsArray(AttendArray) Then

With rs.Fields
.Append "StaffNo", adBSTR
.Append "Time", adBSTR
.Append "AttendType", adBSTR
End With
rs.Open
With rs
For i = 0 To UBound(AttendArray, 2)
.AddNew
.Fields("StaffNO") = AttendArray(0, i)
.Fields("Time") = AttendArray(1, i)
.Fields("AttendType") = AttendArray(2, i)
.Update
Next i
End With

Set Strm = New ADODB.Stream
rs.Save Strm, adPersistXML
Set XMLHttp = New XMLHTTPRequest
XMLHttp.Open "POST", Url, False
XMLHttp.send Strm.ReadText

If Err.Number = 0 Then
UPloadData = XMLHttp.responseText
Sleep (10000)
'If Left(UPloadData, 2) = "NO" Then
If InStr(1, UPloadData, "NO") > 0 Then
UPloadData = LoadResString(5038)
WriteLog 4, "Upload data failed"
End If
'If Left(UPloadData, 2) = "OK" Then
If InStr(1, UPloadData, "OK") > 0 Then
ObjSas.MarkRecord
WriteLog 4, "Upload data success"
UPloadData = LoadResString(5037)
End If
Else
UPloadData = LoadResString(5036)
WriteLog 4, "Upload data failed"
End If

Else
UPloadData = LoadResString(5035)
End If

Set ObjSas = Nothing
Set rs = Nothing


这样传送觉得不是很稳定,尤其是数据量大的时候经常出现超时问题

后来曾经用SOAP实现调用远程服务器函数,但觉得那样配置比较麻烦,除了IIS要配置可解析WSDL文件外,客户端安装SOAP组件比较麻烦。

我一直想,能不能通过ADO直接连接远程数据库,其实觉得那样做应该是没有问题,但我从来没有那么做。

请大家说说各自都是如何实现的。那种方法更加安全,稳定


...全文
44 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
heton 2003-05-28
  • 打赏
  • 举报
回复
看来大伙对这个问题不是很感兴趣

上传下载的数据包含二进制数据等等,我找不出更好的办法了,只能通过ADO连接远程数据库了
online 2003-05-27
  • 打赏
  • 举报
回复
首先在vb中建立一个”标准EXE”的工程。添加引用:Microsoft Soap Type library。注意:如果没有安装Microsoft Soap Toolkit,是没有这个类型库的。
可以在http://www.ourfly.com中下载。
添加一个text
Private Sub Form_Load()
Text1.Text = add()
End Sub

Public Function Add() As String
Dim objSoapClient As New SoapClient
objSoapClient.ClientProperty("ServerHTTPRequest") = True
Call objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL", "Service1", "Service1Soap")
这句也可以
objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL")

Add = objSoapClient.Show("龙卷风.NET")
End Function
这是我以前写的,差不多

我在delphi论坛问了,还没有结果
http://expert.csdn.net/Expert/topic/1836/1836745.xml?temp=6.556338E-02
heton 2003-05-27
  • 打赏
  • 举报
回复
up
heton 2003-05-27
  • 打赏
  • 举报
回复
在vb中编写一个DLL组件,用SOAP WSDL Generator(安装组件后有这个工具)生成wsdl文件,在这个DLL组件里面使用ado打开数据库,用RECORDSET记录返回recordset 的getrows,

如Public SOAPClient As MSSOAPLib30.SoapClient30


Set SOAPClient = New MSSOAPLib30.SoapClient30
SOAPClient.MSSoapInit "http://" & ServerAddr & "/SASService/SASService.WSDL", "", ""


调用远程函数
ReturnValue = SOAPClient.GetACLList(TerminalID, CompanyCode)

GetACLList就是远程服务器端函数,返回的是记录集





online 2003-05-26
  • 打赏
  • 举报
回复
,PB我没有做过,我不知道它是如何实现直接将本地数据拷贝到远程
1。建立服务端程序,来响应客户端的连接
2。连接成功后,本地检索数据窗,得到数据,形成blob数据类型,
调用远程组件,将blob数据传输到远程,在远程还远成数据窗,然后update

online 2003-05-26
  • 打赏
  • 举报
回复
后来曾经用SOAP实现调用远程服务器函数,但觉得那样配置比较麻烦,除了IIS要配置可解析WSDL文件外,客户端安装SOAP组件比较麻烦。
这个你怎么做的?
返回纪录集,如何调用??
heton 2003-05-26
  • 打赏
  • 举报
回复
online说的有道理,PB我没有做过,我不知道它是如何实现直接将本地数据拷贝到远程
online 2003-05-26
  • 打赏
  • 举报
回复
我的个人观点:
1.vb传送数据比较麻烦,不能把结果集提交到服务端,只能字符串或者xml传输。
后来曾经用SOAP实现调用远程服务器函数,但觉得那样配置比较麻烦,除了IIS要配置可解析WSDL文件外,客户端安装SOAP组件比较麻烦。
2.要解析wsdl文件,可能装.net环境,客户端必须安装soap组件。
而且webservice可以返回dataset,但是vb必须xml化才能接受。
能不能通过ADO直接连接远程数据库,其实觉得那样做应该是没有问题,但我从来没有那么做。
3.可以,但是安全性降低。

可以考虑
1.我用pb作过,比较优秀,直接将本地数据拷贝到远程
2.delphi没有试过,但是它有远程数据模块,估计也没有问题
3.下载数据都没有问题。只要能从服务端得到数据显示到客户端,应该没有问题。
4.可以使用webservice,但是没有试过返回纪录集的情况
5.如果com+,下载是没有问题的,上传数据也比较麻烦
heton 2003-05-26
  • 打赏
  • 举报
回复
大伙是怎么做的

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧