【问题标题】:SSIS Script Task - input string was not in a correct formatSSIS 脚本任务 - 输入字符串的格式不正确
【发布时间】:2016-05-16 19:48:42
【问题描述】:

我在 SSIS 上遇到了一个非常奇怪的问题,想知道其他人是否也遇到过类似的问题。

在数据流中,我有一个源,它从 MSSQL 表中获取数据,然后将其提供给数据转换脚本任务。

脚本任务如下:

脚本任务

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string SecurityHeader = (string)Variables.SecurityHeader;
    string APIToken = (string)Variables.APIToken;
    var AppFormID = (string)Row.AppFormID;
    var AppClassName = (string)Row.AppClassName;
    var Lat = Row.Latitude;
    var Long = Row.Longitude;

    var data = new
    {
        record = new
        {
            status = Row.Status.ToString(),
            latitude = Row.Latitude,
            longitude = Row.Longitude,
            form_values = new Dictionary<string, string>()
        }
    };

    if (Row.CreatedBy_IsNull == false) { data.record.form_values["1a09"] = Row.CreatedBy.ToString(); }

    string jsonstring = JsonConvert.SerializeObject(data);
    var client = new RestClient(AppURLRef);
    var request = new RestRequest(Method.POST);
    request.AddHeader(SecurityHeader, APIToken);
    request.AddHeader("content-type", "application/json");
    request.AddParameter("application/json", jsonstring, ParameterType.RequestBody);

    try
    {
        IRestResponse dataresponse = client.Execute(request);
        if (dataresponse.StatusCode.ToString() == "Created")
        {
            var listobject = JsonConvert.DeserializeObject<Lists>(dataresponse.Content);
        }
        else
        {
            Row.OErrorMsg = dataresponse.ErrorMessage.ToString();
        };
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message + "  Data: " + ex.Data + "   Inner Exception:  " + ex.InnerException);
    }
}

问题

当我在没有任何断点的情况下运行它时,我得到一个消息框,错误为 “输入字符串格式不正确”

真正奇怪的地方在于,当我在代码中设置断点时,代码运行良好,因此不可能出现行错误。

以前有没有人遇到过这样的问题,如果有,您是如何解决的?

更新

在遵循一些建议后,我将 try catch 块移到了脚本的开头,这导致 try catch 块从未被命中。

我试图在输入进程行的最顶部添加一个MessageBox.Show(""),但同样没有命中。发生的事情比这两个想法都高,我无法找出这是在哪里或如何发生的。

再次重申错误是在 MessageBox 中,而不是在输出中,并且没有任何内容记录在进程选项卡中。因此,这意味着没有行号,也没有有用的错误消息来讨论此错误发生的位置。

【问题讨论】:

  • 当错误弹出时它会显示行号。另外,您能否检查两个转换部分的数据类型,它应该具有适当的值才能获得转换。
  • 不确定影响失败/成功的断点,但尝试扩大 try 块的范围。将开始语句移动到string SecurityHeader之前的行
  • @billinkc - 好主意,但又不行,包括整个脚本,什么也没有。我还在脚本的最顶部添加了一个消息框,并且由于某种原因它永远不会被击中。更高级别的事情正在发生......只是不确定在哪里
  • @sumngh 不怕,如果我有行号我就不会问这个问题了
  • Define "nothing" 出错还是没遇到错误?

标签: c# sql-server ssis


【解决方案1】:

在注释掉一切并删除所有输入列后,我设法解决了这个错误。

我把它归结为微软想要惩罚我的另一种方式,我复制了代码删除了脚本任务,添加了一个新的脚本任务并将旧代码复制回来。工作完美......

感谢微软!!

【讨论】:

    【解决方案2】:

    将延迟放在 MessageBox.Show 下一行的 catch 块中

    您可以查看消息框。

    有时消息框会进入后台(使用 ALT +TAB 找到它)。

    【讨论】:

    • 感谢@sandeep rawat - 但这不是问题,它永远不会进入 try catch 块,它会更早地碰到一些东西,为什么设置断点修复它更奇怪。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-08-22
    相关资源
    最近更新 更多