2009-08-31 20 views
4

有誰知道如何使用C#從MUMPS數據庫查詢而不使用KBSQL -ODBC?查詢MUMPS從asp.net/C#

我們有要求從MUMPS數據庫(Mckesson STAR患者護理)查詢,當我們使用KBSQL時,它限制了6個併發用戶。所以我們試圖直接查詢MUMPS而不使用KBSQL。

我期待着LINQ TO MUMPS。

+0

Eric,你好, 是的,你是對的......我有艱難的時期,但我有一個希望一些身體會給我一個提示。 – porhills 2009-08-31 12:33:00

回答

1

您使用的是哪種廠商和版本的MUMPS?該解決方案無疑將取決於他們已經暴露的供應商的API。

+0

嗨,我們的供應商是Mckesson。 – porhills 2009-10-01 14:51:16

3

首先,我也感到你的痛苦。幾年前,我在MagicFS/Focus開發過程中遇到了不幸的經歷,而且我們對關係查詢支持也有同樣的要求。爲什麼人們總是想要他們不能擁有的東西?

無論如何,如果你正在使用腮腺炎版本就像是MagicFS /對焦任何事情,你有機會獲得持有「數據庫」(平面文件)的文件系統,那麼一個可能的途徑是:

  1. 將平面文件導出到XML文件。爲此,您必須使用MUMPS或您選擇的語言手動發佈平面文件中的XML。儘管聽起來很痛苦,但由於您可能不想手動確定當前記錄,因此可能需要MUMPS。

  2. 閱讀使用LINQ to XML

  3. 運行LINQ查詢XML。

當然,第一步說起來容易做起來難,如果您試圖在運行中構建XML文件,甚至會更困難。對此的一個變種是通過夜間服務器進程等來管理像索引這樣的XML文件的生成。

如果你只想以特定的方式查詢(即我想加入ID上的Foo和Bar表,而這就是我想要的),我會考慮將這些數據拉入並緩存到服務器端的C#集合中,並且完全跳過查詢(或者使用WCF或類似的方法將這些查詢拉出來,然後執行LINQ查詢)。

4

我認爲Mckesson使用Intersystems的Cache 作爲其腮腺炎(M)供應商。緩存支持.Net(請參閱文檔here)。 Jesse Liberty在使用C#,.Net和Windows Forms作爲Cache數據庫的前端方面擁有相當不錯的article

我不確定關於LINQ(我不是這裏的專家),但是這可能會讓你知道從哪裏開始完成項目。

邁克爾

2

目前所有的流行性腮腺炎語言的實現必須指定的TCP/IP連接響應流行性腮腺炎程序的能力。本地MUMPS數據庫被構建爲有序多鍵和值對的層次結構,實質上是NoSQL範例的超集。

KB/SQL是一組響應SQL/ODBC查詢的程序,將它們翻譯成這個MUMPS「全局」數據查詢,從MUMPS中檢索和合並結果,然後以這種形式發回數據SQL/ODBC協議期望。

如果你有你的執行權限/安全認證,使您可以創建和運行程序流行性腮腺炎(稱爲「程序」),那麼你可以給你從這些程序所需的任何協議作出迴應。 MUMPS系統可以在TCP/IP端口或主機操作系統文件上生成文本或二進制結果。許多供應商明確禁止您在合同中這樣做,以提供醫療保健和金融解決方案。

據我所知,LINQ語法是一個專有的微軟產品,但也肯定有LINQ般的開源努力在那裏。我還沒有看到任何關於LINQ的線路協議的正式定義,但是如果有的話,可以編寫一個MUMPS例程來使用該協議進行通信。但是,它必須執行類似於KB/SQL的操作,因爲LINQ語法和SQL語法都非常接近本地MUMPS語法。

MUMPS數據結構和存儲機制可以機械地轉換爲XML語法。這可能仍然需要大量的努力,因爲系統供應商不太可能提供爲這種機械創建的XML語法定義的DTD,而且您仍然必須處理存儲在基於MUMPS的系統中的編碼值和引用以其原始形式。

3

您可以通過分離從應用程序實例

數據庫連接避免了6個用戶限制使用KB/SQL ODBC直通中間層(無論是在您的應用程序DAL) 或單獨的服務(Windows服務)。

該組件可以跟使用至多6級單獨的線程腮腺炎數據庫(與KB/SQL限制線)。

該組件可以使用ADO.NET for ODBC與KBSQL ODBC驅動程序進行通信。 然後,您可以使用LINQ for ADO.NET從應用程序中使用數據。

您可能需要使用一個排隊系統像MSMQ來管理數據請求的隊列。如果6個併發連接不足以滿足請求的數量。 對排隊請求和使用LINQ異步調用來避免阻止用戶交互是一個很好的設計實踐。