【发布时间】:2018-02-15 13:05:58
【问题描述】:
我有一个 dtsx 包,其中包含一堆数据流。
所有这些都从表中选择行,每一行都包含一个带有一些 JSON 的列,有一个反序列化 JSON 的脚本组件 (C#),然后是一个将数据加载到一些缓冲区表的数据目标。
处理一些非常简单的 JSON 的最简单脚本之一可以完美地自行运行(右键单击 -> 执行任务,或者当所有其他任务被禁用时),但是当我尝试将包作为一个整体运行时,这个包因错误消息而跌倒
索引超出了数组的范围。 在 ScriptMain.Input0_ProcessInputRow(Input0Buffer 行) 在 UserComponent.Input0_ProcessInput(Input0Buffer 缓冲区) 在 UserComponent.ProcessInput(Int32 InputID,字符串 InputName,PipelineBuffer 缓冲区,OutputNameMap OutputMap) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponent.ProcessInput(Int32 InputID,PipelineBuffer 缓冲区) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer 缓冲区)
JSON 看起来像这样...
{
"token": "0b683877-81d6-4dhs-a1ad-9fcfff6acb61",
"email": "someone@gmail.com"
}
还有这样的c#
public class RootAttributes
{
public string token { get; set; }
public string email { get; set; }
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
String myEvtData = System.Text.Encoding.Unicode.GetString(Row.evtdata.GetBlobData(0, Convert.ToInt32(Row.evtdata.Length)));
JavaScriptSerializer js = new JavaScriptSerializer();
RootAttributes jRow = js.Deserialize<RootAttributes>(myEvtData);
//DB Output
Output0Buffer.AddRow();
Output0Buffer.country = Row.country;
Output0Buffer.ord = Row.ord;
Output0Buffer.aggregateversion = Row.aggregateversion;
Output0Buffer.clienttype = Row.clienttype;
Output0Buffer.aggregateid = Row.aggregateid;
Output0Buffer.updby = Row.updby;
Output0Buffer.evttimestamp = Row.evttimestamp;
//JSON Output
Output0Buffer.token = jRow.token;
Output0Buffer.email = jRow.email;
}
我有第二个脚本 - 几乎相同,但也失败并显示相同的错误消息。我试过一个接一个地独立运行它们 - 即同时运行所有 DF。
请帮忙
谢谢
迈克
【问题讨论】: