0

我正在使用以下结构将数据从 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 以加快上传速度?

谢谢!

4

1 回答 1

1

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

这实际上取决于您和另一端连接到的机器有多少跳来自主要干线,以及它们之间的路由。它也不总是相同的路线。使用tracert命令查看,因为瓶颈可能是通过 10 Mb/s 连接而不是 OC 线路的数据包。

在服务器本身上它很快(在 10 分钟内插入 300,000 次),

不言而喻,在机器本地执行某些操作将以尽可能快的速度运行,超出给定时间机器上的负载。

...上传通过 VPN 进行。

虽然它是安全的,但它使问题更加复杂,因为这种安全性的开销意味着与未加密数据相比,每个数据包发送的数据更少。

正如我之前提到的,一旦数据包在网络之外,您就无法控制所采用的路由。我只能建议将文件上传到服务器,然后从那里运行。

下载比上传快得多,尽管它仍然只是一个 ADO 命令。那是因为数据是作为二进制数据从 SQL Server 下载的吗?有没有什么方法可以在不先将文件上传到服务器的情况下实现相同的上传性能?

取决于连接和合同条款。住宅互联网始终是非对称连接 - 您将拥有比上传更多的下载带宽。原因是冲浪/等是以下载为中心的——你使用很少的带宽来上传,比如页面请求和提交表单。直到你想上传文件...

获得更好的上传速度的唯一方法是获得更好的连接和/或合同条款。

于 2009-12-18T05:28:34.293 回答