C# SSI以编程方式更新列名和数据类型
我创建了一个脚本任务,该任务读取excel文件并尝试更新连接管理器列的详细信息 但是即使运行时没有错误,更改也不会“保存”,因此包会保留列的先前详细信息 程序读取并存储信息后(ColumnNames[],MaxWidth[]等)C# SSI以编程方式更新列名和数据类型,c#,ssis,sql-server-2012-datatools,C#,Ssis,Sql Server 2012 Datatools,我创建了一个脚本任务,该任务读取excel文件并尝试更新连接管理器列的详细信息 但是即使运行时没有错误,更改也不会“保存”,因此包会保留列的先前详细信息 程序读取并存储信息后(ColumnNames[],MaxWidth[]等) 删除连接管理器的现有列: //INITIALIZE CONNECTION MANAGER OBJECTS ConnectionManager conn = Dts.Connections["Flat File Connection Manager"];
//INITIALIZE CONNECTION MANAGER OBJECTS
ConnectionManager conn = Dts.Connections["Flat File Connection Manager"];
var connectionFlatF = (Wrapper.IDTSConnectionManagerFlatFile100)conn.InnerObject;
foreach (Wrapper.IDTSConnectionManagerFlatFileColumn100 column in connectionFlatF.Columns)
{
connectionFlatF.Columns.Remove(column);
}
for (i = 0; i < ColumnNames.Count; i++) {
//Add column
Wrapper.IDTSConnectionManagerFlatFileColumn100 flatfilecolumn = (Wrapper.IDTSConnectionManagerFlatFileColumn100)connectionFlatF.Columns.Add();
//Add column details
flatfilecolumn.ColumnType = "Delimited";
flatfilecolumn.ColumnDelimiter = "\t";
flatfilecolumn.ColumnWidth = 0;
if (FinalType[i] == "[DT_STR]")
{
flatfilecolumn.MaximumWidth = Int32.Parse(MaxWidth[i]);
}
else if (FinalType[i] == "[DT_NUMERIC]")
{
flatfilecolumn.DataPrecision = Int32.Parse(Percision[i]);
flatfilecolumn.DataScale = Int32.Parse(Scale[i]);
}
//Column name
Wrapper.IDTSName100 columnname = (Wrapper.IDTSName100)flatfilecolumn;
columnname.Name = ColumnNames[i];
}
conn.Dispose();
for(i=0;i
是的,我很确定你不能这么做。你可能想看看BiML,好吧。是因为我在包中运行脚本吗??如果我将脚本移动到父包,并尝试更改子包的连接管理器,会怎么样?不,我认为您无法更改连接管理器的列,这些列将在脚本之外持续存在。脚本运行完成后,连接管理器的列将恢复到设计时创建的方式。是的,我很确定您不能这样做。你可能想看看BiML,好吧。是因为我在包中运行脚本吗??如果我将脚本移动到父包,并尝试更改子包的连接管理器,会怎么样?不,我认为您无法更改连接管理器的列,这些列将在脚本之外持续存在。脚本运行完成后,连接管理器的列将恢复到设计时创建的方式。