从asp.net/C#查询MUMPS

有没有人知道如何使用C#从MUMPS数据库查询而不使用KBSQL -ODBC?

我们要求从MUMPS数据库(Mckesson STAR患者护理)查询,当我们使用KBSQL时,它限制为6个并发用户。 所以我们试图直接查询MUMPS而不使用KBSQL。

我期待像LINQ TO MUMPS这样的东西。

我认为Mckesson使用Intersystems的Cache作为其mumps(M)提供者。 Cache支持.Net(请参阅此处的文档)。 Jesse Liberty有一篇关于使用C#,。Net和Windows Forms作为Cache数据库前端的文章。

我不确定LINQ(我不是这里的专家),但这可能会让你知道从哪里开始完成你的项目。

迈克尔

首先,我也感受到你的痛苦。 几年前我在MagicFS / Focus中开发了不幸的经历,我们对关系查询支持提出了完全相同的要求。 为什么人们总是想要他们不能拥有的东西?

无论如何,如果您使用的MUMPS版本与MagicFS / Focus类似,并且您可以访问包含“数据库”(平面文件)的文件系统,那么一个可能的途径是:

  1. 将平面文件导出为XML文件。 为此,您必须使用MUMPS或您选择的语言从平面文件手动发出XML。 听起来很痛苦,MUMPS可能是要走的路,因为您可能不想手动确定当前记录。

  2. 使用LINQ to XML读入XML

  3. 运行LINQ查询。

当然,第一步说起来容易做起来难,如果你想要动态构建XML文件,甚至可能会更加困难。 对此的变型是通过夜间服务器进程等来管理诸如索引之类的XML文件的生成。

如果您只是以特定方式进行查询(即我想在ID上加入Foo和Bar表,这就是我想要的),我会考虑将这些数据拉入并缓存到服务器端C#集合中,并跳过查询完全(或使用WCF或类似的东西拉出那些然后做你的LINQ查询)。

您可以通过将数据库连接与应用程序实例分开来避免6用户限制

通过中间层(应用程序中的DAL)或单独的服务(Windows服务)使用KB / SQL ODBC。

该组件可以使用最多6个独立的线程与MUMPS数据库通信(符合KB / SQL限制)。

该组件可以使用ADO.NET for ODBC与KBSQL ODBC驱动程序进行通信。 然后,您可以使用LINQ for ADO.NET从应用程序中使用数据。

您可能需要使用排队系统(如MSMQ)来管理数据请求的排队。 如果6个并发连接不足以满足请求量。 将请求排队并使用LINQ异步调用以避免阻止用户交互是一种很好的设计实践。

所有当前的MUMPS语言实现都能够指定响应TCP ​​/ IP连接的MUMPS程序。 本机MUMPS数据库被构造为有序多键和值对的层次结构,本质上是NoSQL范例的超集。

KB / SQL是一组程序,它们响应SQL / ODBC查询,将它们转换为MUMPS“全局”数据查询,检索并合并MUMPS的结果,然后以SQL / ODBC协议的forms发回数据预计。

如果您拥有允许创建和运行MUMPS程序(称为“例程”)的实现的权限/安全权限,那么您可以从这些程序中响应您想要的任何协议。 MUMPS系统可以在TCP / IP端口或主机操作系统文件上生成文本或二进制结果。 许多供应商明确禁止您在合同中这样做,以提供医疗保健和财务解决方案。

据我所知,LINQ语法是微软的专有产品,尽管有类似LINQ的开源工作。 我还没有看到LINQ的行协议的任何正式定义,但是如果有的话,可以编写MUMPS例程来使用该协议进行通信。 但是,它必须执行类似于KB / SQL的操作,因为LINQ语法和SQL语法都不是非常接近本机MUMPS语法。

MUMPS数据结构和存储机制可以机械地转换为XML语法。 这可能仍然需要大量工作,因为系统供应商极不可能提供为此机械创建的XML语法定义的DTD,并且您仍然必须处理存储在基于MUMPS的系统中的编码值和引用以原始forms。

您使用的MUMPS供应商和版本是什么? 毫无疑问,解决方案将取决于他们所暴露的供应商的API。