之前做的一些系统中都涉及将本地数据上传到远程数据库服务器,或者将远程数据库服务器的数据下载的本地,都不知道用那种方式实现更方便,更安全,在此向大伙请教。我曾经用这样的方式实现在远程服务器写一个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直接连接远程数据库,其实觉得那样做应该是没有问题,但我从来没有那么做。请大家说说各自都是如何实现的。那种方法更加安全,稳定
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直接连接远程数据库,其实觉得那样做应该是没有问题,但我从来没有那么做。请大家说说各自都是如何实现的。那种方法更加安全,稳定
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+,下载是没有问题的,上传数据也比较麻烦
这个你怎么做的?
返回纪录集,如何调用??
1。建立服务端程序,来响应客户端的连接
2。连接成功后,本地检索数据窗,得到数据,形成blob数据类型,
调用远程组件,将blob数据传输到远程,在远程还远成数据窗,然后update
Set SOAPClient = New MSSOAPLib30.SoapClient30
SOAPClient.MSSoapInit "http://" & ServerAddr & "/SASService/SASService.WSDL", "", ""
调用远程函数
ReturnValue = SOAPClient.GetACLList(TerminalID, CompanyCode)GetACLList就是远程服务器端函数,返回的是记录集
可以在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