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