C# C语言中数据库的高效EDI解析#

C# C语言中数据库的高效EDI解析#,c#,edi,x12,C#,Edi,X12,3年多前,我们被要求作为紧急事项为客户开发EDI解决方案 他们想要解决方案的完全IP/控制权等,不想使用免费的开源解决方案,不想为BizTalk等支付大笔费用,也不想向货车支付经常性费用 当时我们做了一些研究,实际上没有找到很多关于EDI格式、解析等的信息。所以我们的2人开发团队直接投入进来,用C#/ASP.Net开发了一个解决方案。由于将要发生的EDI消息事务数量较少(每天大约100个),我们采用了一个正则表达式过程来解析、验证和插入数据库。这是通过一个单独的C#应用程序完成的,该应用程序计划

3年多前,我们被要求作为紧急事项为客户开发EDI解决方案

他们想要解决方案的完全IP/控制权等,不想使用免费的开源解决方案,不想为BizTalk等支付大笔费用,也不想向货车支付经常性费用

当时我们做了一些研究,实际上没有找到很多关于EDI格式、解析等的信息。所以我们的2人开发团队直接投入进来,用C#/ASP.Net开发了一个解决方案。由于将要发生的EDI消息事务数量较少(每天大约100个),我们采用了一个正则表达式过程来解析、验证和插入数据库。这是通过一个单独的C#应用程序完成的,该应用程序计划每隔几分钟运行一次,并连接到客户端各种提供商的FTP、AS2、EBMX通信和下载数据以及上传任何出站EDI消息

然后,我们开发了一个web前端,该前端允许客户员工通过各种收入报告完全访问数据,能够控制数据,并允许一些客户代理登录、与数据交互以及启动发票交易

客户现在希望为其业务的另一个渠道做更多的EDI工作,然而,这一次EDI消息事务将跃升到1000。我们的开发团队关心的是RegEx的使用。我最近读到,使用正则表达式进行EDI解析有巨大的开销,应该避免

我们最初采用它的唯一原因是缺乏经验,不知道什么是最好的使用方法。这就是说,RegEx使管理edi消息模板变得轻而易举,包括模板内的验证。客户机向他们的书中添加了多个提供者,我们能够在几分钟内添加新的消息模板(带有自定义更改)

经过最近更多的研究,我们发现大多数解决方案将EDI文件解析为XML。这有什么原因吗?这仅仅是为了采用更通用的格式和/或避免数据库访问吗?通过平面文件EDI消息解析XML是否更快

我们希望EDI文件中的数据元素在数据库中?我们只是解析XML文件吗?这难道不是可以避免的另一个处理步骤吗

我为我的问题的一般性道歉,但我很难找到答案

非常感谢您抽出时间


注意:我们的开发团队只使用Microsoft产品,因此在提供反馈时请考虑这一点。

我怀疑大多数选择编写自己的解决方案的开发人员编写了自己的EDI到XML转换类,因为他们的端点集成支持XML(或者他们不能直接写入数据库,或者想使用XSLT向最终用户很好地显示数据)。我编写了将其“翻译”为CSV和平面文件格式的解析器,因为这是我们需要导入的。我还编写了直接转储到数据库中的解析器。解析为XML通常是作为一个整体的一些人的必要步骤“中间件"一种方法。如果你不需要做中间步骤,那你为什么要这样做?如果你能把它写出来给DB,那就一定要这样做。你也没有提到你在做什么文档,我假设你已经在你的应用程序中构建了FA过程。RegEx应该继续为你工作,而且有很多方法可以剥除c在


话虽如此,我的免责声明仍然适用。你在这里重新发明轮子。我理解你客户的愿望,很高兴你能够满足他们的需求。坦白说,我可能会解雇客户:)因为你只使用微软的产品,你有点让自己束手无策。综上所述,BizTalk比其他软件包讨论得更多。这可能是有原因的,正如你所发现的,它也非常昂贵。我是联络三角洲的大粉丝,在Windows上运行,在其核心使用微软基础类,并允许你以BizTalk的一小部分的价格将任何一个翻译成任何一个。在我看来,维护拖放“映射”比维护数千行代码要容易,但嘿,策略就是策略:)希望这有帮助。

大约3年前,我还创建了一个x12解析器,将x12 edi解析为xml。它目前在上以开源的形式提供。我这样做的原因是我希望解析部分不关心目标,不管它是数据库还是平面文件。事实证明,这是很有价值的,因为一些用户使用Oracle而不是Sql Server,并且许多用户将其展平为平面文件,以加载到他们的数据库或发送到某个下游进程。我认为这使得解析器本身对于许多环境都非常灵活。 我喜欢XML的另一个原因是,我能够添加对没有记住所有EDI代码的人(基本上每个人)都有价值的其他注释,并且我能够使用这些注释将其转换为HTML(参见网站上的示例)。 我还内置了将对象分解为单个消息的功能,以便后期处理可以一次使用一个对象。 很多用户帮我优化了它,这样它就可以处理巨大的文件,所以它变得非常稳定。我现在正在对它进行一些维护,以便它能够支持所有4010个事务。 关于解析到数据库的部分我留给了用户,因为每个人似乎都对如何设计数据表非常挑剔(例如,我不同意一位同事是否使用int或guid作为表标识,那些倾向于DBA的人更喜欢int,那些使用大量ORMs的人更喜欢guid)

在我发布这篇文章后不久,我添加了数据库支持,因此您可以跳过XML并将其直接转到SqL Server数据库。您可以决定有多少段类型将被解析到各个表中,这样您就不会感到臃肿