2011-04-28 129 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