You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS脚本组件作为数据源无法向SQL目标写入行

SSIS脚本组件未写入数据的问题修复

问题根源分析

  • StreamReader逻辑错误:PreExecute中初始化的textReader指向连接管理器获取的文件,但遍历stagingPath下的文件时,未使用当前文件创建新的StreamReader,反而复用旧实例,导致实际读取的不是目标文件;同时using(textReader)会自动释放资源,后续手动Close/Dispose会引发异常。
  • 无效的Split操作:ReadLine()已移除行尾换行符,用换行符拆分整行完全多余,拆分后的items[0]是整行内容,判断首字符应该直接取行的第一个字符,而非拆分结果。
  • 冗余代码:AcquireConnections中获取的rxFile未被使用,属于无效逻辑。

修正后的代码

public class ScriptMain : UserComponent
{
    private string stagingPath = "mypath";

    public override void CreateNewOutputRows()
    {
        DirectoryInfo di = new DirectoryInfo(stagingPath);
        FileInfo[] files = di.GetFiles("*.txt");

        foreach (FileInfo file in files)
        {
            // 为每个目标文件创建独立的StreamReader
            using (StreamReader textReader = new StreamReader(file.FullName))
            {
                while (!textReader.EndOfStream)
                {
                    string line = textReader.ReadLine();
                    // 跳过空行,避免索引越界
                    if (string.IsNullOrEmpty(line))
                        continue;

                    // 直接取首字符判断,无需拆分操作
                    string firstChar = line[0].ToString();
                    if (firstChar == "2")
                    {
                        PharmacyBuffer.AddRow();
                        // 按固定宽度要求赋值整行
                        PharmacyBuffer.Column0 = line;
                    }
                    else if (firstChar == "4")
                    {
                        TransactionsBuffer.AddRow();
                        TransactionsBuffer.Column0 = line;
                    }
                }
            }
        }
    }
}

关键调整说明

  • 移除无用的AcquireConnections、PreExecute和PostExecute重写,简化逻辑。
  • 为每个遍历到的TXT文件创建独立的StreamReader,确保读取目标文件。
  • 直接通过line[0]获取首字符,避免无效拆分,增加空行判断防止索引越界。
  • 输出列直接赋值整行(匹配固定宽度700的要求),如需拆分固定宽度字段可后续补充处理。

内容的提问来源于stack exchange,提问作者SidC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:05:05