gpt4 book ai didi

c# - SSIS 脚本组件不允许文本流输出

转载 作者:行者123 更新时间:2023-12-02 17:11:41 24 4
gpt4 key购买 nike

我正在尝试使用 SSIS 将 JSON 文件导入我的数据库。由于我使用的是 SQL Server 2016,我可以将文件放在一行中并使用 OPENJSON 读取它们。

我的问题是不想只引入 JSON 文本。我还需要从文件名和当前目录中获取一些信息。

我的脚本组件看起来像这样:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string type = "NA";
string ChassisSN = "NA";
string CartridgeSN = "NA";

string filepath = Variables.File;
string filename = Path.GetFileNameWithoutExtension(filepath);
string filenamefull = Path.GetFileName(filepath);
string Parent = new DirectoryInfo(Path.GetDirectoryName(filepath)).Name;
Char splitDelim = '_';
String[] FileNameSplit = filename.Split(splitDelim);
String[] ParentSplit = Parent.Split(splitDelim);
CartridgeSN = FileNameSplit[2];
ChassisSN = ParentSplit[2];
type = FileNameSplit[3];

if (ChassisSN != oldChassisSN)
{
oldChassisSN = ChassisSN;
}

Output0Buffer.AddRow();
Output0Buffer.Filename = filenamefull.Trim();
Output0Buffer.ChassisSN = ChassisSN.Trim();
Output0Buffer.CartridgeSN = CartridgeSN.Trim();
Output0Buffer.Type = type.Trim();
Output0Buffer.JSON = Row.Column0.ToString;
}

我的问题是,当我尝试将 JSON 数据放回新列时,它说它是只读的,因为我选择了文本流数据类型。由于文件很大,字符很可能会超过 4000 个。

我还尝试同时执行平面文件源和脚本作为源并合并数据,但一直出现在单独的行中。

它循环遍历的每个文件只产生一行数据,这可以在我的代码中看到。那么我怎样才能在一行中获得我需要的所有信息呢?

最佳答案

有点晚了,但对于其他寻找此问题答案的人来说可能仍然相关。

当您将输出列定义为 DT_(N)TEXT 时,它会从值类型变为 BlobColumn。对象,不能直接赋值。相反,应该使用 AddBlobData() 方法来提供一个值:

MainBuffer.AddRow();
MainBuffer.Id = item.Id;
MainBuffer.LargeCol.AddBlobData(Encoding.UTF8.GetBytes(item.JsonData));

关于c# - SSIS 脚本组件不允许文本流输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48895527/

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