2011-04-28 121 views
0

我試圖將所有input0Buffer轉儲到txt文件,以結束我的努力,使得平坦的目標可重用,因爲我已經完成了超過100個包和每個結構以及列是不同的。將Input0Buffer寫入文本文件的SSIS腳本任務組件

我將錯誤行重定向到一個平面文件,所以在每個軟件包中手動設置它是一場噩夢,所以我想將整個輸入寫入而不指定Row.Name,它們全部放入文本文件中。

我到了只有一列的地步!這讓我瘋狂!!

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 
Imports System.IO 
Imports System.Reflection 
Imports System.Xml 
Imports Microsoft.SqlServer.Dts.Pipeline 


<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute()> _ 
<CLSCompliant(False)> _ 
Public Class ScriptMain 
    Inherits UserComponent 

    Dim textWriter As StreamWriter 
    Private inputBuffer As PipelineBuffer 

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer) 
    inputBuffer = Buffer 
    MyBase.ProcessInput(InputID, Buffer) 
    End Sub 

    Public Overrides Sub PreExecute() 
    MyBase.PreExecute() 
    textWriter = New StreamWriter("c:\Test4.txt", True) 
    End Sub 

    Public Overrides Sub PostExecute() 
    MyBase.PostExecute() 
    textWriter.Close() 
    '' 
    End Sub 

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 

    Dim delim As String = ", " 

    Dim RowCount As Integer = 0 

    For RowCount = 0 To inputBuffer.ColumnCount = -1 
     If inputBuffer.Item(RowCount).ToString() = "" Then 
     inputBuffer.Item(RowCount) = String.Empty 
     End If 
    Next 

    textWriter.WriteLine(inputBuffer.Item(RowCount).ToString() & delim) 

    End Sub 

End Class 

任何人都可以幫助我嗎?

+0

此問題已在MSDN上提出:http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/82639c70-1954-4c15-9f6e-2ece1c69ef7​​8/ – JYousef 2011-04-29 19:05:44

回答

1

問題出在你寫的地方。您正在寫入For循環之外。你循環遍歷每一行,並將條目的值設置爲String.Empty,但是這裏沒有對textWriter進行任何寫入。調整代碼如下:

Dim myBuilder As New StringBuilder 

For RowCount = 0 To inputBuffer.ColumnCount = -1 
    If inputBuffer.Item(RowCount).ToString() = "" Then 
    inputBuffer.Item(RowCount) = String.Empty 
    End If 
    myBuilder.Append(inputBuffer.Item(RowCount).ToString() & delim) 
Next 

textWriter.WriteLine(myBuilder.ToString) 

這將確保每個列都被寫入。唯一的問題是你的最後一列在它後面會有一個分隔符。編寫之前,您可能需要將其修剪掉。此外,您還需要將一個Imports System.Text添加到您的代碼中。

一個說明,我想補充,因爲它可能會導致一些混亂:你的循環計數器被稱爲行數時,它正在執行計算列的行爲(列數-1向我們展示了)。這可能會導致一些混亂,並可能會導致編碼錯誤的假設。

+0

感謝和抱歉已晚回覆.... – JYousef 2011-06-03 14:57:27