我从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分钟内30万个插入),该国的另一面是比较慢的(300,000插入可能需要数小时)。远程上传通过VPN操作。

我认为网络等待时间必须向下减缓进程。有没有什么办法来解决网络延迟,或者调整的VPN,使上传速度更快?

谢谢!

有帮助吗?

解决方案

  

该过程的速度取决于服务器并运行该过程的计算机之间的地理距离。

这真的取决于有多少啤酒花你,你要连接到另一端的机器是从主要干线,和之间的路由。这并不总是相同的路线,无论是。使用tracert命令来查看,因为瓶颈可能是数据包通过10 Mb / s的连接去,而不是一个OC线。

  

在服务器本身它是快速(300,000插入在10分钟内),

应该不用说,执行一些本地的机器会以最快的速度在机器上在给定的时间运行,负荷之外。

  

...上传通过VPN操作。

虽然它是安全的,这是因为该证券的开销意味着您可以用比如果数据是加密的每个数据包发送更少使问题复杂化。

正如我前面提到的,你不要过度服用一次你的数据包的路由任何控制您的网络之外。所有我可以建议是将文件上传到服务器,然后从那里运行。

  

下载是如此的比上传快得多,尽管它仍然只是一个ADO命令。是,因为数据是从SQL Server作为二进制数据下载?有什么办法来实现对上传相同的性能,而无需首先将文件上传到服务器?

取决于连接&合同条款上。住宅互联网始终是一个非对称连接 - 你会比上传更多的下载带宽。原因是,冲浪的/ etc是下载中心 - 你用很少的带宽,上传,如页面请求,并提交表单。直到你要上传的文件...

要获得更好的上传速度的唯一途径就是获得更好的连接和/或合同条款。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top