从asp.net/C#查询MUMPS

时间:2009-08-31 11:51:59

标签: c# mumps

有人知道如何在不使用KBSQL -ODBC的情况下使用C#从MUMPS数据库进行查询吗?

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

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

5 个答案:

答案 0 :(得分:4)

我认为Mckesson使用Intersystems'Cache 作为其腮腺炎(M)提供者。缓存支持.Net(请参阅文档here)。使用C#,。Net和Windows Forms作为Cache数据库的前端,Jesse Liberty有一个非常好的article

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

迈克尔

答案 1 :(得分:3)

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

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

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

  2. 使用LINQ to XML

  3. 读入XML
  4. 运行LINQ查询。

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

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

答案 2 :(得分:3)

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

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

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

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

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

答案 3 :(得分:2)

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

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

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

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

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

答案 4 :(得分:1)

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