我使用以下结构将数据从Excel上传到SQL Server:
Private Sub ado_upload()
Dim objConnection As New ADODB.Connection
Dim objCommand As New ADODB.Command
Dim strSQL As String
Dim strDSN As String
Dim intCounter As Integer
strDSN = "provider=SQLOLEDB;" _
& "server=<server>;" _
& "database=<database>;" _
& "uid=<uid>;pwd=<pwd>;" _
& "trusted_connection=false;"
With objConnection
.ConnectionString = strDSN
.Open
End With
strSQL = "SET NOCOUNT ON; " _
& "INSERT INTO dbo.[table1] ( [col1] ) VALUES ( ? );"
With objCommand
.ActiveConnection = objConnection
.CommandText = strSQL
.Prepared = True
.Parameters.Append .CreateParameter("col1", adInteger, adParamInput)
For intCounter = 0 To 9
.Parameters("Col1").Value = intCounter
.Execute
Next intCounter
End With
End Sub
过程的速度取决于服务器与运行该过程的计算机之间的地理距离。在服务器本身上它很快(在10分钟内300,000次插入),在该国的另一边它相对较慢(300,000次插入可能需要数小时)。远程上传通过VPN运行。
我认为网络延迟必然会减慢进程。有没有办法解决网络延迟,或调整VPN以加快上传速度?
谢谢!
答案 0 :(得分:1)
程序的速度取决于服务器与运行该程序的计算机之间的地理距离。
这实际上取决于你和你在另一端连接的机器有多少跳跃来自主要的中继,以及它们之间的路由。它也不总是相同的路线。使用tracert
命令查看,因为瓶颈可能是通过10 Mb / s连接而不是OC线路的数据包。
在服务器本身上它很快(在10分钟内插入300,000次),
不言而喻,在给定时间执行机器本地的某些操作将以尽可能最快的速度运行。
...上传通过VPN运行。
虽然它是安全的,但它会使问题复杂化,因为该安全性的开销意味着每个数据包的发送量比数据未加密时的数据包少。
正如我之前提到的,一旦您的数据包在网络之外,您就无法控制所采用的路由。我所能建议的是将文件上传到服务器,然后从那里运行。
下载比上传快得多,即使它仍然只是一个ADO命令。那是因为数据是从SQL Server下载的二进制数据吗?有没有办法在上传时实现相同的性能,而无需先将文件上传到服务器?
取决于连接&amp;合同条款。住宅互联网始终是非对称连接 - 您将拥有比上传更多的下载带宽。原因是冲浪/等等以下载为中心 - 您使用非常少的带宽进行上传,例如页面请求和提交表单。直到你想上传文件......
获得更好上传速度的唯一方法是获得更好的连接和/或合同条款。