2016-03-02 68 views
0

我對SSIS,Visual Studio相當陌生。認爲在開始時可能會好起來。如何使用http連接管理器SSIS動態更改服務器URL?

我想要實現的是從http://www.ads-slo.org/statistika/網站下載某個xls文件並將其存儲在我的計算機上的某個文件夾中。我已經實現了,但問題是我知道如何一次完成一個文件。我通過打開新的連接,去http連接,並在輸入服務器url的經理中做到了這一點:在我的情況下,如果讓我們說我們從2016年1月開始,這是:http://www.ads-slo.org/media/xls/2016/Januar-2016.xls。這樣做後,我已經構建了一個腳本任務,或者從一個網站上覆制它,它會根據連接管理器給定一個特定的url來下載文件。

我的問題是,我想下載本網站上的所有文件,所以從2007年1月開始,到2016年1月結束,只有一個包,並且不會更改我的連接管理器服務器url設置100次。

有什麼辦法可以幫助我。我會永遠感激。

預先感謝您。

此致Domen

回答

0

這裏是一個非常簡單的例子(它可以改善 - 參見後碼塊註釋)通過使用腳本任務動態地改變連接字符串。您還可以使用表達式和連接管理器的表達式屬性動態更改連接字符串。但是,由於您正在使用腳本任務來處理下載,因此我已經使用其中一個進行了演示。

由於您沒有標記您正在使用的腳本語言(VB或C#),我已經在VB中編寫了一個粗略的草稿。

我已添加評論,但stackoverflow語法突出顯示解釋奇怪;道歉。

Public Sub Main() 
    ' Get the HTTP Connection 
    Dim connObj As Object = Dts.Connections("HTTP Connection Manager").AcquireConnection(Nothing) 
    Dim connection As New HttpClientConnection(connObj) 

    ' Static list of month names for dynamic connection string (obviously add as many as needed) 
    Dim monthNames As String() = New String() {"Januar", "February", "March"} 

    ' Nested loop - for each year and month, try to download the Excel file 
    For Y As Integer = 2007 To 2016 Step 1 
     For M As Integer = 0 To monthNames.Length - 1 Step 1 
      ' Set the assumed name of the remote file 
      Dim remoteFileName As String = monthNames(M) + "-" + Y.ToString() + ".xls" 

      ' Change the connection string a.k.a dynamic connection string 
      connection.ServerURL = "http://www.ads-slo.org/media/xls/" + Y.ToString() + "/" + remoteFileName 

      ' Set where to download the file to 
      Dim localFileName As String = "C:\Temp\" + remoteFileName 

      Try 
       connection.DownloadFile(localFileName, True) 

       Dim buffer As Byte() = connection.DownloadData() 
       Dim data As String = Encoding.ASCII.GetString(buffer) 
      Catch E As Exception 
       ' File may not exist on remote server, delete the blank copy it attempted to create 
       File.Delete(localFileName) 
      End Try 
     Next 
    Next 

    Dts.TaskResult = DTSExecResult.Success 
End Sub 

這怎麼能改進?

一個潛在的改進是解析的文件夾和目錄內容的遠程服務器(保存爲月份名稱,硬編碼的開始和結束多年的建設和文件名的靜態列表)使用HttpWebRequest

但是,遠程服務器權限可能會存在問題,因此您需要進行進一步調查並與服務器管理員進行交流。

測試上述代碼,它成功下載了網站上的Januar-2015和Januar-2016 Excel文件。

+0

哇謝謝你太多了。 – user3729625

+0

但是,如果我正試圖在此頁面上下載xls文件,我該怎麼辦:https://nio.gov.si/nio/data/prvic+registrirana+vozila+v+letu+2014+po+mesecih。由於他們的URL不是可以預測的。有一種簡單的方法來解壓縮文件並將它們導入到sql表中嗎? 再次提前謝謝您。 親切的問候,Domen – user3729625

相關問題