2012-01-20 55 views
0

我看到一個問題,與在那裏我發現了以下錯誤的SSIS(SQL Server 2005中)工作:SSIS連接錯誤 - 文件名無效

The file name "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\UNC\FOLDERS\filename.xls;Extended Properties="EXCEL 8.0;HDR=YES";" specified in the connection was not valid.

我周圍本網站和其他搜索指示這是最常見的原因是權限錯誤,但我不相信在這種情況下就是這種情況,因爲任何數量的文件已經通過此實現成功處理。

這裏是設置的概述:

供應商的FTP文件告訴我們,Windows服務回升,拷貝到一個臨時目錄每天的基礎上,然後調用這些文件SSIS作業。每個供應商有兩個SSIS作業用於快照數據饋送,一個用於交易清單。

目前在整個過程中有超過50個不同的SSIS工作。除了在腳本任務步驟中因上述錯誤而失敗的一個特定事務作業之外,它們都工作。文件至少每天至少帶有獨特的文件名,以便我抓住作業,根據源目錄確定供應商,然後根據文件名中的指示器確定文件類型,以確定要調用哪個SSIS作業。由於文件名稱每天都在改變,當服務調用SSIS作業時,我會傳遞一系列參數,包括供應商文件名,以便它可以正確連接到文件。

每個作業都從腳本任務開始,爲腳本的其餘部分設置必要的變量值。例如,由於供應商文件名隨每次運行而改變,因此我通過SSIS變量集合傳入供應商文件名,然後使用該文件名將數據源的連接字符串設置爲字符串中的數據源。在腳本任務的這一點上發生上述錯誤。這裏就是發生錯誤的任務腳本代碼:

Dts.Connections("Transactions File").ConnectionString = _ 
    Dts.Variables("ConnectionString").Value.ToString().Replace("##FILE_PATH##", sourceFilePath) 

ConnectionString中值是:供應商= Microsoft.Jet.OLEDB.4.0;數據源= ## FILE_PATH ##;擴展屬性=「EXCEL 8.0; HDR =是」; sourceFilePath是處理目錄中的供應商文件的完整UNC路徑

我不相信這是一個權限錯誤,因爲所有其他文件都經過此過程(使用相同的保存目錄進行處理)正在工作。它不應該是文件不存在的問題,因爲它再次遵循與每個其他文件相同的過程,並且我已經驗證文件正確地結束在正確的目錄中。我還認爲連接字符串可能太長,但文件路徑最多爲109個字符,即使使用較短的(< 90)完整路徑,也會發生相同的錯誤。

還有什麼你能想到的我想看看?謝謝你的幫助。

+0

是否有您使用腳本來修改ConnectionString屬性,而不是僅僅使用它的表達特別的原因?我不相信這是你的問題,但可能會爲你節省一些維修時間。我相信所提供的假路徑\ UNC \ FOLDERS實際上表示爲\\ UNC \ FOLDERS – billinkc

+0

在回答您的第一個問題時,我學習了SSIS,這是我當時想出的方法。在回答你的第二個問題時,是的,當我創建這篇文章時,這是一個錯字。謝謝。 –

+0

有機會嘗試我的答案?仍然有問題? – billinkc

回答

0

根據所提供的信息,您所做的一切都是正確的。如果您是SSIS的新手,我會建議一件事,那就是您獲得了優秀加載項BIDSHelper的副本。它有很好的功能,可以真正節省您的時間,特別是在配置和表達方面。

我創建了一個Excel連接管理器指向C:\ssisdata\so_paulsmithjr.xls的參考包,並且連接了所有東西。

Control flow

在這一點上,我知道事情是工作,所以現在是時候讓包舉動。我創建了下面的變量和它們的值

  • CurrentFile - C:\ ssisdata \ so_paulsmithjr.xls
  • 佔位符 - ## FILE_PATH ##
  • TemplateConnection - Provider=Microsoft.Jet.OLEDB.4.0;Data Source=##FILE_PATH##;Extended Properties="Excel 8.0;HDR=YES";

第四變量是設置爲表達式(右鍵單擊變量,屬性窗口設置Evaluate as Expression = True &表達式如下)

  • CurrentConnection - REPLACE(@[User::TemplateConnection], @[User::PlaceHolder], @[User::CurrentFile])

我比較了CurrentConnection價值的ReferenceConnection(這是Excel連接管理器的連接字符串的原始值)和事情的匹配。此時,如果要將CurrentFile的值更改爲C:\ ssisdata \ so_paulsmithjr - Copy.xls,則該值將自動反映在CurrentConnection的值中。

最後的技巧是在Excel連接管理器上使用表達式。再次,右擊CM並在屬性下,將會有表達式。它不會擴展,因爲它下面沒有任何東西。而是點擊省略號,然後選擇ConnectionString屬性並再次選擇省略號,這次拖下@[User::CurrentFile]變量。單擊確定x2,現在您的連接管理器被設置爲在CurrentConnection變量指定的任何位置使用。

這樣做還好嗎?

enter image description here

+0

我將此標記爲已接受。修改連接對象以使用表達式修復了問題。不過,我仍然不確定爲什麼現在的代碼沒有在作爲腳本任務的一部分的時候運行。 –

相關問題