轉帖|使用教程|編輯:楊鵬連|2021-02-01 09:34:27.280|閱讀 204 次
概述:這是本系列的第六篇文章,本文介紹了LEAD醫學存儲服務器數據庫如何自定義醫療存儲數據訪問層。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
LEADTOOLS Recognition Imaging SDK是精選的LEADTOOLS SDK功能集,旨在在企業級文檔自動化解決方案中構建端到端文檔成像應用程序,這些解決方案需要OCR,MICR,OMR,條形碼,表單識別和處理,PDF,打印捕獲 ,檔案,注釋和圖像查看功能。 這套功能強大的工具利用LEAD屢獲殊榮的圖像處理技術,智能識別可用于識別和提取任何類型的掃描或傳真形式圖像數據的文檔功能。
點擊下載LEADTOOLS Recognition Imaging SDK試用版
概述
自定義醫療儲存數據訪問層必須包含以下類:
My.Medical.Storage.DataAccessLayer
本教程中使用的醫療存儲數據訪問層包含以下幫助程序類,這些類并不是嚴格符合完整的需求的,而是簡化版本的實現:
示例自定義醫療存儲數據訪問層稱為My.Medical.Storage.DataAccessLayer。 它作為示例項目包含在LEAD安裝中。 它包含兩個表中的所有類。
在Visual Studio中打開項目文件,您將看到項目中的文件:
下表介紹了每個文件的內容: 項目文件
這些類在下面進行了詳細描述,并按命名空間進行組織:
實現一個接口從System.Data.DataRow中提取DICOM數據
用于創建數據訪問代理的助手類
內部存儲實現IStorageDataAccessAgent(MyStorageSqlDbDataAccessAgent)的類型,因此可以動態創建
將DataAccessLayer與DataAccessAgent和配置文件(GlobalPacs.config)關聯起來
定義DataAccessLayer部分名稱(在GlobalPacs.config中使用)
GlobalPacs.config依次將DataAccessLayer部分名稱與連接字符串相關聯
提供創建SQL查詢以訪問(插入,更新,刪除)數據庫中的表項的方法
這些方法覆蓋StorageSqlDbDataAccessAgent的默認行為。
Query Commands
protected override void PreparePatientsQueryCommand
protected override void PrepareStudiesQueryCommand
protected override void PrepareSeriesQueryCommand
protected override void PrepareInstanceQueryCommand
根據級別創建一個查詢數據庫的命令(即PrepareSeriesQueryCommand為系列級數據庫查詢創建一個命令)
重寫PrepareInstancePageQueryCommand
使用分頁時準備實例級命令。分頁返回一個或多個數據頁面的結果,其中用戶指定頁面大小。此示例數據訪問代理中未實現分頁功能。
Count Commands
protected override void PreparePatientsQueryCountCommand
protected override void PrepareStudiesQueryCountCommand
protected override void PrepareSeriesQueryCountCommand
protected override void PrepareInstanceQueryCountCommand
創建一個命令,返回匹配在matchingParamsCollection中指定的搜索條件的行數
刪除命令
protected override void PrepareDeletePatientsCommand
protected override void PrepareDeleteStudiesCommand
protected override void PrepareDeleteSeriesCommand
protected override void PrepareDeleteInstanceCommand
根據matchingParamsCollection中指定的搜索條件創建刪除System.Data.DataTable行的命令
protected override void PrepareDeletePatientsNoChildStudiesCommand
protected override void PrepareDeleteStudiesNoChildSeriesCommand
protected override void PrepareDeleteSeriesNoChildInstancesCommand
創建一個命令,從子表中沒有相應行的表中刪除行。例如,如果MyPatient表項在MyStudy表中沒有對應的條目,則將調用PrepareDeletePatientsNoChildStudiesCommand命令。
public override int DeletePatient
public override int DeleteStudy
public override int DeleteSeries
public override int DeleteInstance
根據在matchingParamsCollection中指定的搜索條件從數據庫表中刪除行的高級命令
使用PrepareDeleteXxxxCommand()覆蓋
這些命令還會刪除層次結構中上方表格中的相應行
例如,DeleteStudy將從MyStudy表中刪除一行或多行。如果相應的MyPatientTable患者行不包含更多研究,那么這些行也會被刪除。
Exists命令
protected override void PrepareIsPatientExistsCommand
protected override void PrepareIsStudiesExistsCommand
protected override void PrepareIsSeriesExistsCommand
protected override void PrepareIsInstanceExistsCommand
根據唯一ID(PatientID,StudyInstanceUID,SeriesInstanceUID或SOPInstanceUID)創建命令以測試存在性。
其他命令
保護覆蓋字符串[] GetCompositeInstanceQueryDataAdapterTables
返回包含數據庫中所有表名稱的列表
保護覆蓋DataSet CreateCompositeInstanceDataSet
創建一個表示數據庫表的數據集。這實際上是一個強類型,但它作為基類DataSet返回。默認實現返回CompositeInstanceDataSet。對于本教程,您將返回強類型的MyDataSet。
- MyPatient
- MyStudy
- MySeries
- MYINSTANCE
public virtual void UpdateCompositeInstance
- 根據輸入參數myDataSet更新數據庫中的必要表項(MyPatient,MyStudy,MySeries,MyInstance)。
- myDataSet是一個DataSet,包含需要應用的所有必需的添加,更新和刪除
- 如果在此過程中發生異常,則所有更新都將被退出。
public override void StoreDicom
- 為Leadtools.Dicom.DicomDataSet創建必要的表項(MyPatient,MyStudy,MySeries,MyInstance)
- 基于參數來覆蓋表格行
- updateExistentPatient
- updateExistentStudy
- updateExistentSeries
- updateExistentInstances
namespace My.Medical.Storage.DataAccessLayer.DataAccessLogic.BusinessEntity
class MyDataSet
My.Medical.Storage.DataAccessLayer.DataAccessLogic.DataAccessAgent.Database.SqlServer
MyStorageSqlDbDataAccessAgent類用于查詢/更新/刪除數據庫中的項的SQL查詢語句和語句片段
namespace
My.Medical.Storage.DataAccessLayer.DataAccessLogic.DicomDataSetConvertor
public void FillADONetDataSet
由MyStorageSqlDbDataAccessAgent.StoreDicom調用
從DicomDataSet對象中提取患者,研究,系列和實例信息,并相應地添加/更新DataSet表(患者,研究,系列,實例)。
更新參數(updateExistentPatient,updateExistentStudy,updateExistentSeries,updateExistentInstances)會影響相應的現有DataSet行是保持不變還是被覆蓋。
例如,如果updateExistentPatient為true且已有一行具有相同患者ID的DataSet“MyPatient”表,則患者行將被新的患者數據覆蓋。
public bool AutoTruncate
如果為true,則在必要時截斷DicomDataSet中的數據,以便在DataTable列中最大長度。
private void FillPatientData
如果DicomDataSet PatientID尚未存在,則向DataSet Patient表(MyPatientTable)添加新行
private void FillStudiesData
如果DicomDataSet StudyInstanceUID尚不存在,則向DataSet Study Table(MyStudyTable)添加一個新行
private void FillSeriesData
如果DicomDataSet SeriesInstanceUID尚不存在,則向DataSet Study Table(MySeriesTable)添加一個新行
private void FillInstancetData
如果DicomDataSet SOPInstanceUID尚不存在,則向DataSet Study Table(MyInstanceTable)添加一個新行
oprivate void FillPatientInformation
如果'update'參數為true,則將所有DataSet Patient表信息替換為DicomDataSet中的相應信息。
此方法需要根據您的架構進行更改。 對于教程模式,我們更新患者表中的所有字段
- PatientName
- PatientBirthday
- PatientSex
- PatientComments
private void FillStudyInformation
如果'update'參數為true,則將所有DataSet Study表信息替換為DicomDataSet中的相應信息。
此方法需要根據您的架構進行更改。 對于教程架構,我們更新Study表中的所有字段
- StudyDate
- AccessionNumber
- StudyDescription
- StudyReferringPhysiciansName
private void FillSeriesInformation
如果'update'參數為true,則將所有DataSet Series表信息替換為DicomDataSet中的相應信息。
此方法需要根據您的架構進行更改。 對于教程架構,我們更新Series表中的所有字段
- SeriesNumber
- SeriesDate
- SeriesDescription
- Modality
- BodyPartExamined
private void FillInstanceInformation
- 如果'update'參數為true,則將所有DataSet Instance表信息替換為DicomDataSet中的相應信息。
- 此方法需要根據您的架構進行更改。 對于教程架構,我們更新Series表中的所有字段
- InstanceNumber
- SOPClassUID
- Rows
- Columns
- BitsAllocated
- ImageLastStoreDate - 更新至當前日期.
- ImageFilename - 存儲DicomDataSet的位置的完整路徑
namespace My.Medical.Storage.DataAccessLayer.Entities
這些類與MatchingParameterCollection一起使用,以生成數據庫查詢的WHERE語句。
MatchingParameterCollection包含一個MatchingParameterList
MatchingParameterList包含一個或多個ICatalogEntity
MyPatient,MyStudy,MySeries和MyInstance類均派生自CatalogEntity(實現ICatalogEntity接口)。
MyPatient包含可在MyPatientTable中查詢的所有內容的屬性。
每個屬性都使用[EntityElementAttribute]屬性進行修飾。
例如,MyPatientTable包含以下列,其中任何一個或全部都可以是查詢的一部分
PatientId
PatientIdentification
PatientName
PatientBirthday
PatientSex
PatientComments
可以使用MatchingParameterCollection調用MyStorageSqlDbDataAccessAgent中的任何覆蓋
示例:準備一個生成查詢的System.Data.IDbCommand或名為'Smith'的所有男性患者
C#代碼
// This example builds an IDbCommand // for querying the MyPatient table // The generated WHERE clause contains PatientName and PatientSex public void MyExample() { MatchingParameterCollection matchingParamCollection = new MatchingParameterCollection(); MatchingParameterList matchingParamList = new MatchingParameterList(); MyPatient myPatient = new MyPatient(); myPatient.PatientName = "Smith"; myPatient.PatientSex = "M"; matchingParamList.Add(myPatient); matchingParamCollection.Add(matchingParamList); IDbCommand command = new SqlCommand(); // This reads the storage catalog // Before you run this, make sure and add the following to your application configuration file //\<configSections\> // \<section name="xmlStorageCatalogSettings" type="Leadtools.Medical.Storage.DataAccessLayer.XmlStorageCatalogSettings, Leadtools.Medical.Storage.DataAccessLayer" /\> //\</configSections\> StorageCatalog myCatalog = new StorageCatalog(); Collection\<CatalogElement[]\> catalogElements = CatalogDescriptor.GetElementsCollection(matchingParamCollection, myCatalog , true); PreparePatientsQueryCommand(command, catalogElements); // The 'WHERE' clause of command.CommandText is the following: // WHERE ( ( MyPatientTable.PatientName LIKE 'Smith' ) AND ( MyPatientTable.PatientSex LIKE 'M' ) ) Console.WriteLine(command.CommandText); }了解更多
這是本系列的第六篇文章,本文介紹了LEAD醫學存儲服務器數據庫如何自定義醫療存儲數據訪問層,我們將在《LEAD醫療存儲服務器自定義數據庫系列教程 – 強類型DataSet類和XML》系列的第七篇文章中,著重介紹LEAD醫用存儲服務器數據庫的強類型DataSet類和XML Schema。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn