彩票走势图

LEADTOOLS医疗存储服务器自定义数据库系列教程(六)— 自定义医疗存储数据访问层

转帖|使用教程|编辑:杨鹏连|2021-02-01 09:34:27.280|阅读 118 次

概述:这是本系列的第六篇文章,本文介绍了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中打开项目文件,您将看到项目中的文件:

下表介绍了每个文件的内容: 项目文件

这些类在下面进行了详细描述,并按命名空间进行组织:

  • namespace My.Medical.Storage.DataAccessLayer
  • class MyPatientInfo : IPatientInfo
  • class MyStudyInfo : IStudyInfo
  • class MySeriesInfo : ISeriesInfo
  • class MyInstanceInfo : IInstanceInfo

实现一个接口从System.Data.DataRow中提取DICOM数据

  • class MyStorageDataAccessConfigurationView

用于创建数据访问代理的助手类

内部存储实现IStorageDataAccessAgent(MyStorageSqlDbDataAccessAgent)的类型,因此可以动态创建

将DataAccessLayer与DataAccessAgent和配置文件(GlobalPacs.config)关联起来

定义DataAccessLayer部分名称(在GlobalPacs.config中使用)

GlobalPacs.config依次将DataAccessLayer部分名称与连接字符串相关联

  • class MyStorageSqlDbDataAccessAgent

提供创建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

  • 强类型类,表示自定义数据库的内存中表示形式
  • 具有允许对数据库字段进行读/写访问的成员
  • 维护数据库表之间的外键关系列表
  • 可以使用Visual Studio生成此类。 有关说明,请参阅 Creating the Strongly Typed DataSet Class and the XML Schema File.
namespace

My.Medical.Storage.DataAccessLayer.DataAccessLogic.DataAccessAgent.Database.SqlServer

  • class MyConstants
  • class MySqlStatments

MyStorageSqlDbDataAccessAgent类用于查询/更新/删除数据库中的项的SQL查询语句和语句片段

namespace

 My.Medical.Storage.DataAccessLayer.DataAccessLogic.DicomDataSetConvertor

  • class MyDicomDataSetConvertor

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

  • public class MyPatient
  • public class MyStudy
  • public class MySeries
  • public class MyInstance

这些类与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。

试用版下载>>>

LEADTOOLS 使用教程>>>


想要购买LEADTOOLS正版授权,或了解更多产品信息请点击


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关产品
LEADTOOLS Imaging Pro Developer Toolkit

20多年的老牌图像处理控件,支持TWAIN扫描、200多种图像效果、150多种图像格式…

LEADTOOLS Document Suite Developer Toolkit

LEADTOOLS Document Imaging Suite SDK是LEADTOOLS SDK中各种特点的精选组合,这套强大的工具利用了LEAD行业领先的图像处理技术来智能地识别文档的特征,而根据文档的特征可以识别扫描的或传真的任何类型的表格图像。

LEADTOOLS Document Imaging Developer Toolkit

多语言的文档图像处理控件,支持光符识别处理、条形码扫描识别等。

LEADTOOLS Medical Developer Toolkit

LEADTOOLS Medical Imaging是一款医疗成像控件,包含了一些精心挑选的、经过优化的特性,可以满足医疗成像应用程序开发的特殊需要。

LEADTOOLS Medical Imaging Suite Developer Toolkit

LEADTOOLS Medical Imaging Suite帮您开发功能强大的PACS和医学成像应用程序

扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP