gpt4 book ai didi

sql-server - Foreach 循环容器在 5 次迭代后给出错误。 SSIS

转载 作者:行者123 更新时间:2023-12-03 03:24:40 24 4
gpt4 key购买 nike

我创建了 SSIS 包,它可以迭代 Excel 电子表格并将数据加载到 SQL 中。使用 ForEach 循环容器。

由于某种原因,经过 5 次迭代后我收到了一个错误。

enter image description here

我尝试过:

  1. 将 Foreach 循环容器上的 MaximumErrorCount 设置为 0
  2. OLE DB 目标 上的ValidateExternaMetadata 设置为关闭

为什么它迭代了 5 次,然后出现错误?

最佳答案

他们的主要问题是

Opening a rowset for "New_Val$A3:C10000" failed. Check that the object exists in the database

它与目标无关,看起来在所有工作表中都找不到 New_Val$ 工作表

您可以在 DataFlow Task 之前添加脚本任务来检索第一个工作表名称,逻辑如下:

using System;  
using System.Data;
using System.Data.OleDb;
using Microsoft.SqlServer.Dts.Runtime;

public class ScriptMain
{

public void Main()
{

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\myFolder\\excelfile.xlsx;Extended Properties=\"Excel 8.0;HDR=YES\";";

using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;

// Get all Sheets in Excel File
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

DataRow dr= dtSheet .Rows[0];

string sheetName = dr["TABLE_NAME"].ToString();

// You have to assign value to variable (assuming sheetName is created in SSIS)
Dts.Variables["sheetName"].Value = sheetName ;
}

cmd = null;
conn.Close();
}
}

在 Excel 源中,从变量中读取工作表名称,从表达式中使用此变量的 SQL 命令中读取工作表名称

请注意,所有工作表必须具有相同的结构,否则永远不会成功

关于sql-server - Foreach 循环容器在 5 次迭代后给出错误。 SSIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48447932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com