适合医院多数据访问框架简介
由于医院的系统很多,而且各个系统的厂商和采用数据库的类型也都不同,对没有医院综合管理平台和临床数据中心的的医院来说,想要获取各个系统的数据,没有一个方便的访问框架非常不方便。
框架是底层采用AOD.NET来访问操作数据库的.
IAccessDataBase.cs
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace JDRMYY.IService { /// <summary> /// 连接数据库接口 /// </summary> /// <typeparam name="paramType">需要传入数据库的参数类型</typeparam> public interface IAccessDataBase<paramType> where paramType : class { /// <summary> /// 执行查询,并返回由查询返回的结果集中的第一行的第一列。 /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns>结果集中的第一行的第一列</returns> object ExecuteScalar(string sql, params paramType[] parameters); /// <summary> /// 对连接执行 SQL 语句并返回受影响的行数 /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns>受影响的行数</returns> int ExecuteNoneQuery(string sql, params paramType[] parameters); /// <summary> /// 对连接执行 SQL 语句并返回 DataTable /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns>DataTable</returns> DataTable ExecuteDataTable(string sql,params paramType[] parameters); /// <summary> /// 对连接执行 存储过程 语句并返回受影响的行数 /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns></returns> int SpExecuteNoneQuery(string sql, params paramType[] parameters); /// <summary> /// 执行 存储过程,并返回由查询返回的结果集中的第一行的第一列。 /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns>结果集中的第一行的第一列</returns> object SpExecuteScalar(string sql, params paramType[] parameters); /// <summary> /// 对连接执行 存储过程 语句并返回 DataTable /// </summary> /// <param name="sql"></param> /// <param name="parameters"></param> /// <returns></returns> DataTable SpExecuteDataTable(string sql, params paramType[] parameters); /// <summary> /// 更新、插入、删除数据库的时候,事务的封装 /// </summary> /// <param name="ps">是一个可变参数,可以传入多个sql语句和参数,执行一个事务</param> /// <returns></returns> bool ExecuteNoneQueryByTransaction(params PS<paramType>[] ps); } /// <summary> /// sql语句和参数数据 /// </summary> /// <typeparam name="T">数据库参数类型</typeparam> public class PS<T> where T : class { /// <summary> /// sql语句 /// </summary> public string sql { get; set; } /// <summary> /// 参数数组 /// </summary> public T[] pms { get; set; } } }
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<SqlParameter> { /// <summary> /// 数据库连接字符串 /// </summary> public string _ConnStr { get; set; } /// <summary> /// 初始化数据库连接字符串 /// </summary> /// <param name="ConnStr"></param> public MssqlService(string ConnStr) { this._ConnStr = ConnStr; } /// <summary> /// 对连接执行 Transact-SQL 语句并返回 DataTable /// </summary> /// <param name="sql">sql语句</param> /// <param name="parameters">sql参数</param> /// <returns> DataTable </returns> 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]; } } } /// <summary> /// 对连接执行 Transact-SQL 语句并返回受影响的行数 /// </summary> /// <param name="sql">sql语句</param> /// <param name="parameters">sql参数</param> /// <returns>受影响的行数</returns> 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(); } } } /// <summary> /// 执行查询,并返回由查询返回的结果集中的第一行的第一列。 /// </summary> /// <param name="sql">sql语句</param> /// <param name="parameters">sql参数</param> /// <returns>结果集中的第一行的第一列</returns> 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(); } } } /// <summary> /// 对连接执行 存储过程 语句并返回受影响的行数 /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns></returns> 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(); } } } /// <summary> /// 执行 存储过程,并返回由查询返回的结果集中的第一行的第一列。 /// </summary> /// <param name="sql">sql语句</param> /// <param name="pms">sql参数</param> /// <returns>结果集中的第一行的第一列</returns> 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(); } } } /// <summary> /// 对连接执行 存储过程 语句并返回 DataTable /// </summary> /// <param name="sql"></param> /// <param name="pms"></param> /// <returns></returns> 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]; } } } /// <summary> /// 更新、插入、删除数据库的时候,事务的封装 /// </summary> /// <param name="ps"></param> /// <returns></returns> public bool ExecuteNoneQueryByTransaction(params PS<SqlParameter>[] 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<SqlParameter> 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; } } } } } } }