Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis DFT中的脚本任务未被执行_Ssis - Fatal编程技术网

Ssis DFT中的脚本任务未被执行

Ssis DFT中的脚本任务未被执行,ssis,Ssis,我有一个场景,我必须从未知数量的excel文件及其未知数量的选项卡获取数据。所以我创建了一个有50列的表。 问题是ssis包在进入第二个循环后没有进展。第一个循环获取文件名,第二个循环获取该文件中的选项卡名。第二个循环中的DTF打开excel文件选项卡,读取数据并将其写入数据库表 我创建了sperate变量来存储从foreach循环容器中检索到的文件名和选项卡名,并在DTF任务中使用它们。即使是DFT任务也没有任何错误 在DFT内部,我只有一个脚本源来打开excel文件并读取数据,然后将其传

我有一个场景,我必须从未知数量的excel文件及其未知数量的选项卡获取数据。所以我创建了一个有50列的表。

问题是ssis包在进入第二个循环后没有进展。第一个循环获取文件名,第二个循环获取该文件中的选项卡名。第二个循环中的DTF打开excel文件选项卡,读取数据并将其写入数据库表

我创建了sperate变量来存储从foreach循环容器中检索到的文件名和选项卡名,并在DTF任务中使用它们。即使是DFT任务也没有任何错误

在DFT内部,我只有一个脚本源来打开excel文件并读取数据,然后将其传递到oledb目标。

在完成了所有的工作后,DFT任务在循环过程中完成了。在DFT上面的foreach循环中,我放置了一个脚本任务并弹出了一些测试。MessageBox.Show(“blabla”)。它令人担忧。你现在怎么办

下面是脚本任务中的代码

public class ScriptMain : UserComponent
{
    private OleDbDataReader excelReader;
    private OleDbConnection excelConnection;
    private OleDbCommand excelCommand;
    public override void PreExecute()
    {
        base.PreExecute();
        // Open 
        GetDataFromExcelToReader(Variables.IndividualFileNamesForDFT, Variables.IndividualTabNamesForDFT);
    }
    public override void PostExecute()
    {
        base.PostExecute();
        excelReader.Close();
        excelConnection.Close();
    }
    private void GetDataFromExcelToReader(string p_strFileName, string p_strTabName)
    {
        string l_strConnectionString;
        if (File.Exists(p_strFileName))
        {
            string extension = Path.GetExtension(p_strFileName);
            extension = extension.Replace(".", "");
            if (extension.ToLower() == "xlsx")
            {
                l_strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                "Data Source=" + p_strFileName + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\";";
            }
            else
            {
                l_strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + p_strFileName + ";Extended Properties=\"Excel 4.0;HDR=NO;IMEX=1\";";
            }
            excelConnection = new OleDbConnection(l_strConnectionString);
            excelConnection.Open();
            excelCommand = excelConnection.CreateCommand();
            excelCommand.CommandText = "SELECT * FROM [" + p_strTabName + "A1:AX1048576]";
            excelCommand.CommandType = CommandType.Text;
            excelReader = excelCommand.ExecuteReader();
        }
    }
    public override void CreateNewOutputRows()
    {
        int counter = 0;
        while (excelReader.Read())
        {
                Output0Buffer.AddRow();
                Output0Buffer.FileName = Variables.IndividualFileNamesForDFT.ToString();
                Output0Buffer.TabName = Variables.IndividualTabNamesForDFT.ToString();
                Output0Buffer.Col1 = excelReader.FieldCount > 0 ? excelReader[0].ToString() : null;
                Output0Buffer.Col2 = excelReader.FieldCount > 1 ? excelReader[1].ToString() : null;
                Output0Buffer.Col3 = excelReader.FieldCount > 2 ? excelReader[2].ToString() : null;
                Output0Buffer.Col4 = excelReader.FieldCount > 3 ? excelReader[3].ToString() : null;
                Output0Buffer.Col5 = excelReader.FieldCount > 4 ? excelReader[4].ToString() : null;
                Output0Buffer.Col6 = excelReader.FieldCount > 5 ? excelReader[5].ToString() : null;
                Output0Buffer.Col7 = excelReader.FieldCount > 6 ? excelReader[6].ToString() : null;
                Output0Buffer.Col8 = excelReader.FieldCount > 7 ? excelReader[7].ToString() : null;
                Output0Buffer.Col9 = excelReader.FieldCount > 8 ? excelReader[8].ToString() : null;
                Output0Buffer.Col10 = excelReader.FieldCount > 9 ? excelReader[9].ToString() : null;
                Output0Buffer.Col11 = excelReader.FieldCount > 10 ? excelReader[10].ToString() : null;
                Output0Buffer.Col12 = excelReader.FieldCount > 11 ? excelReader[11].ToString() : null;
                Output0Buffer.Col13 = excelReader.FieldCount > 12 ? excelReader[12].ToString() : null;
                Output0Buffer.Col14 = excelReader.FieldCount > 13 ? excelReader[13].ToString() : null;
                Output0Buffer.Col15 = excelReader.FieldCount > 14 ? excelReader[14].ToString() : null;
                Output0Buffer.Col16 = excelReader.FieldCount > 15 ? excelReader[15].ToString() : null;
                Output0Buffer.Col17 = excelReader.FieldCount > 16 ? excelReader[16].ToString() : null;
                Output0Buffer.Col18 = excelReader.FieldCount > 17 ? excelReader[17].ToString() : null;
                Output0Buffer.Col19 = excelReader.FieldCount > 18 ? excelReader[18].ToString() : null;
                Output0Buffer.Col20 = excelReader.FieldCount > 19 ? excelReader[19].ToString() : null;
                Output0Buffer.Col21 = excelReader.FieldCount > 20 ? excelReader[20].ToString() : null;
                Output0Buffer.Col22 = excelReader.FieldCount > 21 ? excelReader[21].ToString() : null;
                Output0Buffer.Col23 = excelReader.FieldCount > 22 ? excelReader[22].ToString() : null;
                Output0Buffer.Col24 = excelReader.FieldCount > 23 ? excelReader[23].ToString() : null;
                Output0Buffer.Col25 = excelReader.FieldCount > 24 ? excelReader[24].ToString() : null;
                Output0Buffer.Col26 = excelReader.FieldCount > 25 ? excelReader[25].ToString() : null;
                Output0Buffer.Col27 = excelReader.FieldCount > 26 ? excelReader[26].ToString() : null;
                Output0Buffer.Col28 = excelReader.FieldCount > 27 ? excelReader[27].ToString() : null;
                Output0Buffer.Col29 = excelReader.FieldCount > 28 ? excelReader[28].ToString() : null;
                Output0Buffer.Col30 = excelReader.FieldCount > 29 ? excelReader[29].ToString() : null;
                Output0Buffer.Col31 = excelReader.FieldCount > 30 ? excelReader[30].ToString() : null;
                Output0Buffer.Col32 = excelReader.FieldCount > 31 ? excelReader[31].ToString() : null;
                Output0Buffer.Col33 = excelReader.FieldCount > 32 ? excelReader[32].ToString() : null;
                Output0Buffer.Col34 = excelReader.FieldCount > 33 ? excelReader[33].ToString() : null;
                Output0Buffer.Col35 = excelReader.FieldCount > 34 ? excelReader[34].ToString() : null;
                Output0Buffer.Col36 = excelReader.FieldCount > 35 ? excelReader[35].ToString() : null;
                Output0Buffer.Col37 = excelReader.FieldCount > 36 ? excelReader[36].ToString() : null;
                Output0Buffer.Col38 = excelReader.FieldCount > 37 ? excelReader[37].ToString() : null;
                Output0Buffer.Col39 = excelReader.FieldCount > 38 ? excelReader[38].ToString() : null;
                Output0Buffer.Col40 = excelReader.FieldCount > 39 ? excelReader[39].ToString() : null;
                Output0Buffer.Col41 = excelReader.FieldCount > 40 ? excelReader[40].ToString() : null;
                Output0Buffer.Col42 = excelReader.FieldCount > 41 ? excelReader[41].ToString() : null;
                Output0Buffer.Col43 = excelReader.FieldCount > 42 ? excelReader[42].ToString() : null;
                Output0Buffer.Col44 = excelReader.FieldCount > 43 ? excelReader[43].ToString() : null;
                Output0Buffer.Col45 = excelReader.FieldCount > 44 ? excelReader[44].ToString() : null;
                Output0Buffer.Col46 = excelReader.FieldCount > 45 ? excelReader[45].ToString() : null;
                Output0Buffer.Col47 = excelReader.FieldCount > 46 ? excelReader[46].ToString() : null;
                Output0Buffer.Col48 = excelReader.FieldCount > 47 ? excelReader[47].ToString() : null;
                Output0Buffer.Col49 = excelReader.FieldCount > 48 ? excelReader[48].ToString() : null;
                Output0Buffer.Col50 = excelReader.FieldCount > 49 ? excelReader[49].ToString() : null;
        }
    }
}

您真的需要阅读A1:AX1048576吗?它是否能处理这个问题,并且只读取它需要的内容

您能否尝试只读取excel文件中所需的部分?例如,如果您有一个包含10列和400行的excel文件,请尝试阅读A1:Z9999-想知道脚本任务是否在尝试将所有这些内容放入内存时陷入了困境,然后由于结果集非常庞大而将其转储到磁盘上。

@Ciarán-谢谢,
插入选择一个特定的范围刚刚打开“完成”选项卡解决了我的问题。“从[“+p_strabName+”]中选择*”

您可以发布数据流脚本组件的代码吗?因为这似乎就是它的来源stuck@lynamc您好,我在脚本任务中发布了代码。如果您有一个软件包的屏幕截图,它会有所帮助。这就是你的图表的样子吗?[Foreach循环容器(文件枚举器)获取excel文档文件名列表]-->[Foreach循环容器(项/ADO枚举器)查看列表,并尝试获取每个excel文档的选项卡/工作表名]。您的代码运行在第二个Foreach容器?@booyaa I上载的图像中,但此处未显示。这里的流程是Foreach循环(循环excel文件)->脚本任务(打开excel文件并获取选项卡)->Foreach循环(循环选项卡)->DFT任务[脚本任务(打开excel文件)->Oledb dest(加载数据表)]是的,我倾向于同意cairnz。实际上,where根本不需要指定范围。你可以简单地说“SELECT*FROM[”+p_strTabName+“]”,因为我不知道我计算了所有行的行数。但这不是问题所在。即使在将行数限制为100行之后,它仍然没有处理,而且,这是一个有趣的问题。没有必要将Microsoft.Jet.OLEDB.4.0作为Microsoft.ACE.OLEDB.12.0引用。提供程序将很好地读取xls文件。但这并不是问题的根源。我避免使用脚本组件,因为它们无法调试。不过,您可以在消息框中显示调试消息,以查看它挂起的位置。@lynamc在foreach循环进程中启动了所有支持DFT任务的weired things之后,现在已启动。在DFT上面的foreach循环中,我放置了一个脚本任务并弹出了一些测试。MessageBox.Show(“blabla”)。这是令人担忧的。这毫无意义,你不能把它留在那里。你还改变了什么吗?