具有可变列长度输出的SSIS C#脚本CSV目标

具有可变列长度输出的SSIS C#脚本CSV目标,c#,sql-server,ssis,C#,Sql Server,Ssis,我有一个项目,我被要求将许多单独的包组合成一个统一的项目。 实际上,所有包都将数据从数据库导出到CSV文件。我正试图使它,使我有一个包,加载个人的工作,并可以执行每一个 这个过程有3个变量 列分隔符 列长度 文件输出路径 我有一个格式化数据的过程,因此我总是接收100列varchar(4000)数据。为了取悦SSIS 我绝不是一个c#人。这就是我需要帮助的地方。我希望C#脚本目标读取一个输入变量以了解列长度,然后循环每个列以创建输出语句 我有以下代码: 我想在PreExecute中生成输出语

我有一个项目,我被要求将许多单独的包组合成一个统一的项目。 实际上,所有包都将数据从数据库导出到CSV文件。我正试图使它,使我有一个包,加载个人的工作,并可以执行每一个

这个过程有3个变量

  • 列分隔符
  • 列长度
  • 文件输出路径
我有一个格式化数据的过程,因此我总是接收100列varchar(4000)数据。为了取悦SSIS

我绝不是一个c#人。这就是我需要帮助的地方。我希望C#脚本目标读取一个输入变量以了解列长度,然后循环每个列以创建输出语句

我有以下代码:

我想在
PreExecute
中生成输出语句,然后在
Input0\u ProcessInputRow

这可能吗

#region Namespaces
using System;
using System.Data;
using System.IO;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Windows.Forms;
#endregion

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    private string OutputFile;
    private int ColumnCount;
    private string ColumnDelimiter;
    private string DefaultColumnDelimiter = ",";
    private StreamWriter textWriter;
    private string DynamicEXEString;

    public override void PreExecute()
    {
        base.PreExecute();
        // CREATE THE SET UP FOR THE CSV FILE AND THE OUTPUT
        ColumnCount = Variables.CC; 
        OutputFile = Variables.OP; 
        ColumnDelimiter = Variables.DL; 

        if (String.IsNullOrEmpty(ColumnDelimiter))
        {
            ColumnDelimiter = DefaultColumnDelimiter;
        }

        textWriter = new StreamWriter(OutputFile, false);
        for (int i = 1; i <= ColumnCount; i++)
        {
            DynamicEXEString += String.Format("textWriter.Write(Row.Column{0});" + Environment.NewLine, i);
            if (i != ColumnCount) // OUTPUT DELIMITER FOR ALL BUT THE LAST ROW. INSTEAD WRITE THE LINE.
            {
                DynamicEXEString += "textWriter.Write(columnDelimiter);" + Environment.NewLine;
            }
            else
            {
                DynamicEXEString += "textWriter.WriteLine();";
            }
        }
        MessageBox.Show(DynamicEXEString); //DEBUG ONLY OUTPUT WHAT THE VALUES ARE.
    }

    public override void PostExecute()
    {
        base.PostExecute();
        textWriter.Close();
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        /*
         * EXECUTE THE CODE THAT IS STORED IN THE VARIABLE DynamicEXEString
         */
    }

}
#区域名称空间
使用制度;
使用系统数据;
使用System.IO;
使用Microsoft.SqlServer.Dts.Pipeline.Wrapper;
使用Microsoft.SqlServer.Dts.Runtime;
使用Microsoft.SqlServer.Dts.Runtime.Wrapper;
使用System.Windows.Forms;
#端区
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
公共类ScriptMain:UserComponent
{
私有字符串输出文件;
私有int列计数;
私有字符串列分隔符;
私有字符串DefaultColumnDelimiter=“,”;
私人流作者;
私有字符串DynamicEXEString;
公共覆盖无效预执行()
{
base.PreExecute();
//创建CSV文件和输出的设置
ColumnCount=Variables.CC;
OutputFile=Variables.OP;
ColumnDelimiter=Variables.DL;
if(String.IsNullOrEmpty(ColumnDelimiter))
{
ColumnDelimiter=DefaultColumnDelimiter;
}
textWriter=新的StreamWriter(OutputFile,false);
对于(int i=1;i