SSIS脚本转换任务让位于长期

时间:2011-03-13 23:51:18

标签: c# ssis

我有以下脚本转换组件。

public class ScriptMain : UserComponent
{
    Regex findCOMMAexp, findAmpersandExp, findANDExp;

    public override void PreExecute()
    {
        base.PreExecute();

        //extract and compress publishers.
        findANDExp = new Regex(@"(\w+\s*)+(?=\band\b)",RegexOptions.Compiled);
        findCOMMAexp = new Regex(@"(\w+\s*)+[,]\s*(\w+\s*)",RegexOptions.Compiled);
        findAmpersandExp = new Regex(@"(\w+\s*)+[&]\s*(\w+\s*)",RegexOptions.Compiled);
    }

    public override void PostExecute()
    {
        base.PostExecute();
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {        
        Row.CompressedPublisher = compressPublisher(Row.F018Publisher);
    }

    public String compressPublisher(String str)
    {

        Match match;

        if (str.Contains("/"))
        {
            return str.Substring(0, str.IndexOf(('/')));
        }
        else if ((match = findANDExp.Match(str)).Success)
        {
            return match.ToString();
        }
        else if ((match = findCOMMAexp.Match(str)).Success)
        {
            return Regex.Replace(str, ",", "");
        }
        else
        {
            return str;
        }
    }
}

3个Regex对象在主类中定义,在PreExecute()中初始化,并在ProcessInputRow调用的方法中使用。我有一个数据库源,它引入一个varchar(45)字符串,定义为F018Publisher。我在10分钟后停止了这个任务,同时尝试解析9k条目。出了什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

我将它包装到C#命令行应用程序中并将ABCDEFGHIJKLMOPQRSTUVWXYZ01234567890123456789作为参数传递给compressPublisher,它从未从此检查返回else if ((match = findANDExp.Match(str)).Success)

同样的评论也发布在推特上