适合医院多数据访问框架简介

       由于医院的系统很多,而且各个系统的厂商和采用数据库的类型也都不同,对没有医院综合管理平台和临床数据中心的的医院来说,想要获取各个系统的数据,没有一个方便的访问框架非常不方便。

       框架是底层采用AOD.NET来访问操作数据库的.

       适合医院多数据访问框架简介_第1张图片

IAccessDataBase.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace JDRMYY.IService
{
    /// 
    /// 连接数据库接口
    /// 
    /// 需要传入数据库的参数类型
    public interface IAccessDataBase where paramType : class
    {

        /// 
        /// 执行查询,并返回由查询返回的结果集中的第一行的第一列。
        /// 
        /// sql语句
        /// sql参数
        /// 结果集中的第一行的第一列
        object ExecuteScalar(string sql, params paramType[] parameters);
        /// 
        /// 对连接执行 SQL 语句并返回受影响的行数
        /// 
        /// sql语句
        /// sql参数
        /// 受影响的行数
        int ExecuteNoneQuery(string sql, params paramType[] parameters);
        /// 
        ///  对连接执行 SQL 语句并返回 DataTable 
        /// 
        /// sql语句
        /// sql参数
        /// DataTable
        DataTable ExecuteDataTable(string sql,params paramType[] parameters);
        /// 
        /// 对连接执行 存储过程 语句并返回受影响的行数
        /// 
        /// sql语句
        /// sql参数
        /// 
        int SpExecuteNoneQuery(string sql, params paramType[] parameters);
        /// 
        /// 执行 存储过程,并返回由查询返回的结果集中的第一行的第一列。
        /// 
        /// sql语句
        /// sql参数
        /// 结果集中的第一行的第一列
        object SpExecuteScalar(string sql, params paramType[] parameters);
        /// 
        /// 对连接执行 存储过程 语句并返回 DataTable 
        /// 
        /// 
        /// 
        /// 
        DataTable SpExecuteDataTable(string sql, params paramType[] parameters);
        /// 
        /// 更新、插入、删除数据库的时候,事务的封装
        /// 
        /// 是一个可变参数,可以传入多个sql语句和参数,执行一个事务
        /// 
        bool ExecuteNoneQueryByTransaction(params PS[] ps);
    }
    /// 
    /// sql语句和参数数据
    /// 
    /// 数据库参数类型
    public class PS where T : class
    {
        /// 
        /// sql语句
        /// 
        public string sql { get; set; }
        /// 
        /// 参数数组
        /// 
        public T[] pms { get; set; }
    }
}
View Code

MssqlService.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using JDRMYY.IService;

namespace JDRMYY.Service
{ 
    public class MssqlService :IAccessDataBase
    {

        /// 
        /// 数据库连接字符串
        /// 
        public string _ConnStr
        {
            get;
            set;
        }
        /// 
        /// 初始化数据库连接字符串
        /// 
        /// 
        public MssqlService(string ConnStr)
        {
            this._ConnStr = ConnStr;

        }
        /// 
        ///  对连接执行 Transact-SQL 语句并返回 DataTable 
        /// 
        /// sql语句
        /// sql参数
        ///  DataTable 
        public DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.CommandTimeout = 300;
                    cmd.Parameters.AddRange(parameters);
                    DataSet dataset = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                    return dataset.Tables[0];
                }
            }
        }
        /// 
        /// 对连接执行 Transact-SQL 语句并返回受影响的行数
        /// 
        /// sql语句
        /// sql参数
        /// 受影响的行数
        public int ExecuteNoneQuery(string sql,params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        /// 
        /// 执行查询,并返回由查询返回的结果集中的第一行的第一列。
        /// 
        /// sql语句
        /// sql参数
        /// 结果集中的第一行的第一列
        public object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }
        /// 
        /// 对连接执行 存储过程 语句并返回受影响的行数
        /// 
        /// sql语句
        /// sql参数
        /// 
        public int SpExecuteNoneQuery(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        /// 
        /// 执行 存储过程,并返回由查询返回的结果集中的第一行的第一列。
        /// 
        /// sql语句
        /// sql参数
        /// 结果集中的第一行的第一列
        public object SpExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }
        /// 
        /// 对连接执行 存储过程 语句并返回 DataTable 
        /// 
        /// 
        /// 
        /// 
        public DataTable SpExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = sql;
                    cmd.CommandTimeout = 300;
                    cmd.Parameters.AddRange(parameters);
                    DataSet dataset = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                    return dataset.Tables[0];
                }
            }
        }
        /// 
        /// 更新、插入、删除数据库的时候,事务的封装
        /// 
        /// 
        /// 
        public bool ExecuteNoneQueryByTransaction(params PS[] ps)
        {

            using (SqlConnection conn = new SqlConnection(this._ConnStr))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        try
                        {
                            cmd.Transaction = trans;
                            foreach (PS p in ps)
                            {
                                cmd.Parameters.Clear();//设置参数之前先清空参数设置
                                cmd.CommandText = p.sql;
                                cmd.Parameters.AddRange(p.pms);
                                cmd.ExecuteNonQuery();
                            }
                            trans.Commit();
                            return true;
                        }
                        catch
                        {
                            trans.Rollback();
                            return false;
                        }
                    }
                }
            }
        }
    }
}
View Code

 

使用数据库对象的时候,引入了线程,从线程中取出数据库对象,如果取不到对象则实例化数据库对象,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OracleClient;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
using Npgsql;
using JDRMYY.IService;
using JDRMYY.Service;
using System.Runtime.Remoting.Messaging;

namespace JDRMYY.Utility
{
    /// 
    /// 从线程中 操作数据库对象的 方式
    /// 
    public class DBFactory
    {
        /// 
        /// 联众HIS数据库访问对象
        /// 
        public static IAccessDataBase LZHisObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("LZHisDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new OracleService(ConnectionString.LZHisConnStr);
                    //4.并存入线程
                    CallContext.SetData("LZHisDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 矽岛HealthCare数据库的访问对象
        /// 
        public static IAccessDataBase SIHealthCareObject
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("SIHealthCareDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MssqlService(ConnectionString.SIHealthCareConnStr);
                    //4.并存入线程
                    CallContext.SetData("SIHealthCareDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 矽岛HealthMedicalRecord数据库的访问对象
        /// 
        public static IAccessDataBase SIHealthMedicalRecordObject
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("SIHealthMedicalRecordDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MssqlService(ConnectionString.SIHealthMedicalRecordConnStr);
                    //4.并存入线程
                    CallContext.SetData("SIHealthMedicalRecordDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 在线考试数据库的访问对象
        /// 
        public static IAccessDataBase ExamObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("ExamDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MysqlService(ConnectionString.ExamConnStr);
                    //4.并存入线程
                    CallContext.SetData("ExamDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// PACS数据库访问对象
        /// 
        public static IAccessDataBase PacsObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("PacsDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new OracleService(ConnectionString.PacsConnStr);
                    //4.并存入线程
                    CallContext.SetData("PacsDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 医惠数据库访问对象
        /// 
        public static IAccessDataBase EwellObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("EwellDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new OracleService(ConnectionString.EwellConnStr);
                    //4.并存入线程
                    CallContext.SetData("EwellDB", db);
                }
                //5.返回数据库对象
                return db;
            }

        }
        /// 
        /// 静脉配置中心数据库访问对象
        /// 
        public static IAccessDataBase PivasObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("PivasDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MssqlService(ConnectionString.PivasConnStr);
                    //4.并存入线程
                    CallContext.SetData("PivasDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 短信机数据库访问对象
        /// 
        public static IAccessDataBase OpenMasObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("OpenMasDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MssqlService(ConnectionString.OpenMasConnStr);
                    //4.并存入线程
                    CallContext.SetData("OpenMasDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// Oa数据库访问对象
        /// 
        public static IAccessDataBase OaObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("OaDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new OracleService(ConnectionString.OaConnStr);
                    //4.并存入线程
                    CallContext.SetData("OaDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 手麻系统数据库访问对象
        /// 
        public static IAccessDataBase DoCareObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("DoCareDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new OracleService(ConnectionString.DoCareConnStr);
                    //4.并存入线程
                    CallContext.SetData("DoCareDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// 心电图数据库访问对象
        /// 
        public static IAccessDataBase EcgObj
        {
            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("EcgDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MssqlService(ConnectionString.EcgConnStr);
                    //4.并存入线程
                    CallContext.SetData("EcgDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// Pacs检查预约数据库访问对象
        /// 
        public static IAccessDataBase PacsYyObj
        {

            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("PacsYyDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new MssqlService(ConnectionString.PacsYyConnStr);
                    //4.并存入线程
                    CallContext.SetData("PacsYyDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }
        /// 
        /// DataV数据库对象初始化
        /// 
        public static IAccessDataBase MbeaconObj
        {

            get
            {
                //1.从线程中取出 键 对应的值
                var db = CallContext.GetData("MbeaconDB") as IAccessDataBase;
                //2.如果为空(线程中不存在)
                if (db == null)
                {
                    //3.实例化 数据库
                    db = new OracleService(ConnectionString.MbeaconConnStr);
                    //4.并存入线程
                    CallContext.SetData("MbeaconDB", db);
                }
                //5.返回数据库对象
                return db;
            }
        }

    }
}
View Code

 

然后项目中使用时就很方便了,通过DBFactory类,就可以拿到各个系统的数据可访问对象了,通过对象就可以操作数据的增、删、改、查了。

适合医院多数据访问框架简介_第2张图片

 

转载于:https://www.cnblogs.com/flywong/p/8257662.html

你可能感兴趣的:(适合医院多数据访问框架简介)