2011-03-29 40 views
2

探索此處的可行性...我們在mvc3網絡應用程序中有一個UI頁面,管理員將使用它來上傳'csv'文件。是否有可能有一個SSIS包將被應用程序調用..這將驗證/轉換所有這些數據,並存儲到數據庫,如果它的全部有效或拋出錯誤的細節應用程序,如果有無效的數據?我們可以使用SSIS從應用程序解析數據,然後再存儲在db ...中?

只是試圖利用SSIS的功能來解析文件和數據轉換。如果這是不可能的,有沒有更好的辦法?

請提供您的想法..很感激!

更新:是,需要在飛行中執行SSIS ..和歸還基於消息..telling的「上傳」,如果他的上傳失敗或不顯示頁面上的一條消息,SSIS會退給應用程序。

+0

你的意思是你想從網頁調用SSIS,網頁運行時? – 2011-03-29 20:35:34

+0

@John:Hillary在對我的回答的評論中解釋說,他們確實希望將實時錯誤信息返回給上傳文件的用戶。這就是「拋出錯誤的詳細信息」的意思...... – 2011-03-29 20:55:29

回答

5

您可以使用SSIS來解析文本文件。你也可以使用大錘驅動修整指甲。最好的辦法就是像FileHelpers這樣讓你遠離解析文本文件的文本解析泥漿。


鑑於編輯和辯論,我會詳細說明一下。主要是我看到幾個大問題,我直接從您的MVC控制器調用SSIS:

a)大規模的外部依賴關係。您的開發人員,CI和登臺環境將需要完整的SQL服務器,並啓用SSIS,並可能需要一系列其他配置,具體取決於實施細節。 b)速度 - SSIS是一個很大的工作引擎,在它開始工作之前需要一段時間才能旋轉起來。 c)消息 - 如果操作的要點是讓用戶知道什麼是錯誤的,SSIS是錯誤的工具。除非你想編寫一個工具來將SSIS導入錯誤轉換爲可讀的英文。那麼你可能應該停止你正在做的事情,並且銷售該工具而不是解決這個問題。另一方面,大多數基於.NET的文件解析工具和C#都爲您提供了大量的錯誤處理功能,可以讓您更快地獲得可理解的錯誤消息給用戶。

最後,如果你在這裏查看大文件,你真的需要考慮某種排隊和消息系統。在這種情況下,SSIS可能會更有意義,儘管我仍然認爲錯誤消息是無用的。

+1

+1 FileHelpers – kd7 2011-03-29 20:23:14

+0

@Paul:所以你說這是一個好主意,試圖在Web應用程序中安裝SSIS,然後捕獲錯誤輸出,當你可以有一些不錯的,乾淨的,而不是SQL Server服務器相關的代碼爲你做? – 2011-03-29 20:29:10

+0

@Wyatt:你說的「SSIS安裝」是什麼意思? SSIS是SQL Server產品系列中的一個工具...您不會安裝它。您指定一個SSIS包,然後執行它。 – 2011-03-29 20:33:46

2

當然SSIS包可以做到這一點,那種事情就是它的目的。當然,如果你有一個經驗豐富的SSIS開發人員,那麼SSIS可能會非常艱鉅。您可以在包和異常表中創建日誌記錄以拋出不良記錄,然後在該過程完成後,檢查日誌/異常表以將任何不良記錄返回給啓動該過程的用戶。我們有一個數據庫,用於存儲每次運行SSISI插件時的元數據,您可能也需要這些數據,以便能夠確定錯誤記錄是與用戶上傳的文件還是與其他人同時運行的文件相關的。

+0

整個問題是如何讓我的Web應用程序在旅途中與SSIS包對話,傳遞文件或輸出回錯誤或成功消息? – hillary 2011-03-29 20:30:01

1

您正在描述一個相當標準的ETL procedure,這正是SSIS的設計目的。 SSIS確實會讀取CSV文件,並能夠在單個字段上執行驗證。你對這個驗證的結果做了什麼(好或壞,不及格)完全取決於你。

是的,你可以在需要的時候發射SSIS包。檢查出dtexec utility。您還可以設置一個SQL Server代理作業,用於監視接收上傳的CSV文件的文件夾,並自動跳出SSIS流程。你的ASP.NET代碼只需要擔心上傳。其他一切都將成爲基於SQL Server/SQL代理的ETL操作。

+0

整個問題是我如何讓我的web應用程序在旅途中與SSIS包交談,傳遞文件或輸出回錯誤或成功消息? – hillary 2011-03-29 20:28:45

+0

是的,你可以。查看我的編輯。 – 2011-03-29 20:29:58

+0

如果我使用.. sql服務器代理 - 我不能將實時錯誤/成功消息返回給用戶。這是reqd在這裏,因爲我們必須提示他糾正該文件並再次上載.. – hillary 2011-03-29 20:48:07

1

您可以從代碼執行SSIS包。我們有一個類似的用戶上傳CSV文件來執行一個包的過程,但是這個包不僅僅是驗證/解析邏輯。

如果它只是一個小驗證和解析邏輯,然後看看Rhino ETL和FileHelpers。事實上,對我們來說,這兩個工具足夠吸引人,我們正在考慮使用這段時間,但我們沒有太多的SSIS包,專用的SSIS資源,我們的大部分包都很簡單。 FileHelpers單獨是一個很好的工具,如果它真的很簡單的解析。

以下是關於Rhino ETL的一些文章。

http://ayende.com/Blog/archive/2008/01/16/Rhino-ETL-2.0.aspx

http://www.codeproject.com/KB/cs/ETLWithCSharp.aspx

https://github.com/ayende/rhino-etl

如果要執行你會想看看進入Microsoft.SqlServer.Dts.Runtime命名空間中的SSIS包。

Here's an article on executing SSIS from c#.

相關問題