zoukankan      html  css  js  c++  java
  • 几年前写的一个支持多数据库切换的设计

    前言

    最新心血来潮,决定把以前做的一些东西做一些整理,于是就有这一篇文章,这次决定写的是大学时期做的一个小项目,里面关于数据库访问的SqlHelper类,项目采用CS结构,支持多种数据库切换,其中也参考了一些网上的东西,如果有版权问题,请私下联系我处理,项目比较简单,对入门还是有一定帮助的,大神请绕道。

    正文

     1、先看SqlServer数据处理部分

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.Data;
      5 using System.Data.SqlClient;
      6 using System.Data.Common;
      7 
      8 namespace DrugShop.Date.SqlServer
      9 {
     10     internal class DataAccessUtil
     11     {
     12         /// <summary>
     13         /// 返回上次操作的第一行、第一列
     14         /// </summary>
     15         /// <param name="sql"></param>
     16         /// <param name="paramList"></param>
     17         /// <param name="conn"></param>
     18         /// <returns></returns>
     19         public static object ExecuteScalar(string sql, List<SqlParameter> paramList, SqlConnection  conn)
     20         {
     21             if (conn.State!=ConnectionState.Open)
     22             {
     23                 conn.Open();
     24             }
     25             SqlCommand cmd = conn.CreateCommand();
     26             cmd.CommandText = sql;
     27             cmd.Parameters.AddRange(paramList.ToArray());
     28             return cmd.ExecuteScalar();
     29         }
     30         /// <summary>
     31         /// 返回上次操作的第一行、第一列
     32         /// </summary>
     33         /// <param name="sql"></param>
     34         /// <param name="paramList"></param>
     35         /// <param name="trans"></param>
     36         /// <returns></returns>
     37         public static object ExecuteScalar(string sql, List<SqlParameter> paramList, SqlTransaction trans)
     38         {
     39             SqlCommand cmd = trans.Connection.CreateCommand();
     40             cmd.Transaction = trans;
     41             cmd.CommandText = sql;
     42             cmd.Parameters.AddRange(paramList.ToArray());
     43             return cmd.ExecuteScalar();
     44         }
     45         #region 执行非查询式数据库操作
     46         
     47         /// <summary>
     48         /// 执行传入连接的非查询SQL语句
     49         /// </summary>
     50         /// <param name="sql"></param>
     51         /// <param name="paramList"></param>
     52         /// <param name="conn"></param>
     53         public static void ExecuteNonQuery(string sql, List<SqlParameter> paramList,SqlConnection conn)
     54         {
     55             ExecuteNonQuery(sql, paramList, CommandType.Text,conn);
     56         }
     57        
     58         /// <summary>
     59         /// 执行传入连接的非查询SQL语句或存储过程
     60         /// </summary>
     61         /// <param name="sql"></param>
     62         /// <param name="paramList"></param>
     63         /// <param name="type"></param>
     64         /// <param name="conn"></param>
     65         public static void ExecuteNonQuery(string sql, List<SqlParameter> paramList, CommandType type, SqlConnection conn)
     66         {
     67             if (conn.State!=ConnectionState.Open)
     68             {
     69                 conn.Open();
     70             }
     71             SqlCommand cmd = conn.CreateCommand();
     72             cmd.CommandText = sql;
     73             cmd.CommandType = type;
     74             cmd.Parameters.AddRange(paramList.ToArray());
     75             cmd.ExecuteNonQuery();
     76         }
     77         /// <summary>
     78         /// 支持事物的非查询式SQL或存储过程
     79         /// </summary>
     80         /// <param name="sql"></param>
     81         /// <param name="paramList"></param>
     82         /// <param name="trans"></param>
     83         public static void ExecuteNonQuery(string sql, List<SqlParameter> paramList, SqlTransaction trans)
     84         {
     85             ExecuteNonQuery(sql, paramList, CommandType.Text, trans);
     86         }
     87         
     88         /// <summary>
     89         /// 支持事物的非查询式SQL或存储过程
     90         /// </summary>
     91         /// <param name="sqlProcedure"></param>
     92         /// <param name="paramList"></param>
     93         /// <param name="type"></param>
     94         /// <param name="trans"></param>
     95         public static void ExecuteNonQuery(string sqlProcedure, List<SqlParameter> paramList, CommandType type, SqlTransaction trans)
     96         {
     97             SqlCommand cmd = trans.Connection.CreateCommand();
     98             cmd.Transaction = trans;
     99             cmd.CommandText = sqlProcedure;
    100             cmd.Parameters.AddRange(paramList.ToArray());
    101             cmd.CommandType = type;
    102             cmd.ExecuteNonQuery();
    103         }
    104         
    105         public static void ExecuteNonQuery(string sqlProcedure, List<SqlParameter> paramList, CommandType type, SqlConnection conn,SqlTransaction trans)
    106         {
    107             SqlCommand cmd = trans.Connection.CreateCommand();
    108             cmd.Transaction = trans;
    109             cmd.CommandText = sqlProcedure;
    110             cmd.Parameters.AddRange(paramList.ToArray());
    111             cmd.CommandType = type;
    112             cmd.ExecuteNonQuery();
    113         }
    114         #endregion
    115         #region 执行查询式数据库操作
    116         /// <summary>
    117         ///执行查询式SQL语句
    118         /// </summary>
    119         /// <param name="sql"></param>
    120         /// <param name="paramList"></param>
    121         /// <returns></returns>
    122         public static SqlDataReader ExecuteReader(string sql, List<SqlParameter> paramList,SqlConnection conn)
    123         {
    124             return ExecuteReader(sql, paramList, CommandType.Text,conn);
    125         }
    126         /// <summary>
    127         /// 执行查询式SQL语句或者存储过程
    128         /// </summary>
    129         /// <param name="sqlOrProcedure"></param>
    130         /// <param name="paramList"></param>
    131         /// <param name="type"></param>
    132         /// <returns></returns>
    133         public static SqlDataReader ExecuteReader(string sqlOrProcedure, List<SqlParameter> paramList, CommandType type,SqlConnection conn)
    134         {
    135             if (conn.State!=ConnectionState.Open)
    136             {
    137                 conn.Open();
    138             }
    139             SqlCommand cmd = conn.CreateCommand();
    140             cmd.CommandText = sqlOrProcedure;
    141             cmd.Parameters.AddRange(paramList.ToArray());
    142             cmd.CommandType = type;
    143             return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    144         }
    145         public static SqlDataReader ExecuteReader(string sql, List<SqlParameter> paramList, SqlTransaction trans)
    146         {
    147             SqlConnection conn = trans.Connection;
    148             SqlCommand cmd = conn.CreateCommand();
    149             cmd.Transaction = trans;
    150             cmd.CommandText = sql;
    151             cmd.Parameters.AddRange(paramList.ToArray());
    152             return cmd.ExecuteReader();
    153         }
    154         public static DataSet ExecuteDataSet(string sql, List<SqlParameter> paramList,SqlConnection conn)
    155         {
    156             return ExecuteDataSet(sql, paramList, CommandType.Text,conn);
    157         }
    158         public static DataSet ExecuteDataSet(string sqlOrProcedure, List<SqlParameter> paramList, CommandType type,SqlConnection conn)
    159         {
    160             if (conn.State!=ConnectionState.Open )
    161             {
    162                 conn.Open();
    163             }
    164             SqlCommand cmd = conn.CreateCommand();
    165             cmd.CommandText = sqlOrProcedure;
    166             cmd.Parameters.AddRange(paramList.ToArray());
    167             cmd.CommandType = type;
    168             DataSet ds = new DataSet();
    169             SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    170             adapter.Fill(ds);
    171             return ds;
    172         }
    173         public static DataTable ExecuteDataTable(string sql, List<SqlParameter> paramList,SqlConnection conn)
    174         {
    175             return ExecuteDataTable(sql, paramList, CommandType.Text,conn);
    176         }
    177         public static DataTable ExecuteDataTable(string sqlOrProcedure, List<SqlParameter> paramList, CommandType type,SqlConnection conn)
    178         {
    179             if (conn.State!=ConnectionState.Open)
    180             {
    181                 conn.Open();
    182             }
    183             SqlCommand cmd = conn.CreateCommand();
    184             cmd.CommandText = sqlOrProcedure;
    185             cmd.Parameters.AddRange(paramList.ToArray());
    186             cmd.CommandType = type;
    187             DataTable dt = new DataTable();
    188             SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    189             adapter.Fill(dt);
    190             return dt;
    191         }
    192         #endregion
    193     }
    194 }
    View Code

    其他的数据库就不写了,因为只实现了Sql Server部分,只是设计上可以支持数据库类型的切换,实际上并没有实现,其他的数据库可以参考SqlServer的代码实现。

    2、通过工厂模式来打开不同的数据库

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.Data;
      5 using System.Configuration;
      6 
      7 namespace DrugShop.Date
      8 {
      9     public class DAOFactory
     10     {
     11         private enum DatabaseType
     12         {
     13             SqlServer,
     14             MySql,
     15             Oracole,
     16             DB2,
     17             Postgre,
     18             SQLite
     19         }
     20         private DatabaseType _DbType;
     21         private string _ProviderName;
     22         private string _ConnectionString;
     23         private DAOFactory()
     24         {
     25             try
     26             {
     27                 string connKey = "Dbconn";
     28                 _ProviderName = ConfigurationManager.ConnectionStrings[connKey].ProviderName;
     29                 _ConnectionString = ConfigurationManager.ConnectionStrings[connKey].ConnectionString;
     30                 if (_ProviderName == "System.Data.SqlClient")
     31                 {
     32                     _DbType = DatabaseType.SqlServer;
     33                 }
     34                 else if (_ProviderName == "System.Data.Oracole")
     35                 {
     36                     _DbType = DatabaseType.Oracole;
     37                 }
     38                 else if (_ProviderName == "System.Data.MySql")
     39                 {
     40                     _DbType = DatabaseType.MySql;
     41                 }
     42                 else if (_ProviderName == "System.Data.DB2")
     43                 {
     44                     _DbType = DatabaseType.DB2;
     45                 }
     46                 else if (_ProviderName == "System.Data.Postgre")
     47                 {
     48                     _DbType = DatabaseType.Postgre;
     49                 }
     50                 else if (_ProviderName == "System.Data.SQLite")
     51                 {
     52                     _DbType = DatabaseType.SQLite;
     53                 }
     54             }
     55             catch (Exception)
     56             {
     57                 throw new ApplicationException("读取数据库配置文件错误,获取数据库文件失败。");
     58             }
     59             
     60 
     61         }
     62         private static DAOFactory _Instance=null;
     63         public static DAOFactory Instance
     64         {
     65             get {
     66                 if (_Instance==null)
     67                 {
     68                     _Instance = new DAOFactory();
     69                 }
     70                 return _Instance;
     71             }
     72         }
     73         public IEventLogDAO CreateEventLogDAO()
     74         {
     75             IEventLogDAO dao = null;
     76             if (_DbType==DatabaseType.SqlServer )
     77             {
     78                 dao = new SqlServer.EventLogDAO();
     79             }
     80             else if (_DbType == DatabaseType.MySql)
     81             {
     82                 dao = new MySql.EventLogDAO();
     83             }
     84             else if (_DbType == DatabaseType.Oracole)
     85             {
     86                 dao = new Oracle.EventLogDAO();
     87             }
     88             else if (_DbType == DatabaseType.DB2)
     89             {
     90                 dao = new DB2.EventLogDAO();
     91             }
     92             else if (_DbType == DatabaseType.Postgre)
     93             {
     94                 dao = new Postgre.EventLogDAO();
     95             }
     96             return dao;
     97         }
     98         public IBillsDAO CreateBillsDAO()
     99         {
    100             IBillsDAO dao = null;
    101             if (_DbType == DatabaseType.SqlServer)
    102             {
    103                 dao = new SqlServer.BillsDAO();
    104             }
    105             else if (_DbType == DatabaseType.MySql)
    106             {
    107                 dao = new MySql.BillsDAO();
    108             }
    109             else if (_DbType == DatabaseType.Oracole)
    110             {
    111                 dao = new Oracole.BillsDAO();
    112             }
    113             else if (_DbType == DatabaseType.DB2)
    114             {
    115                 dao = new DB2.BillsDAO();
    116             }
    117             else if (_DbType == DatabaseType.Postgre)
    118             {
    119                 dao = new Postgre.BillsDAO();
    120             }
    121             return dao;
    122         }
    123         public IBillsTypeDAO CreateBillsTypeDAO()
    124         {
    125             IBillsTypeDAO dao = null;
    126             if (_DbType == DatabaseType.SqlServer)
    127             {
    128                 dao = new SqlServer.BillsTypeDAO();
    129             }
    130             else if (_DbType == DatabaseType.MySql)
    131             {
    132                 dao = new MySql.BillsTypeDAO();
    133             }
    134             else if (_DbType == DatabaseType.Oracole)
    135             {
    136                 dao = new Oracole.BillsTypeDAO();
    137             }
    138             else if (_DbType == DatabaseType.DB2)
    139             {
    140                 dao = new DB2.BillsTypeDAO();
    141             }
    142             else if (_DbType == DatabaseType.Postgre)
    143             {
    144                 dao = new Postgre.BillsTypeDAO();
    145             }
    146             return dao;
    147         }
    148         public ICompanyDAO CreateCompanyDAO()
    149         {
    150             ICompanyDAO dao = null;
    151             if (_DbType == DatabaseType.SqlServer)
    152             {
    153                 dao = new SqlServer.CompanyDAO();
    154             }
    155             else if (_DbType == DatabaseType.MySql)
    156             {
    157                 dao = new MySql.CompanyDAO();
    158             }
    159             else if (_DbType == DatabaseType.Oracole)
    160             {
    161                 dao = new Oracole.CompanyDAO();
    162             }
    163             else if (_DbType == DatabaseType.DB2)
    164             {
    165                 dao = new DB2.CompanyDAO();
    166             }
    167             else if (_DbType == DatabaseType.Postgre)
    168             {
    169                 dao = new Postgre.CompanyDAO();
    170             }
    171             return dao;
    172         }
    173         public ICompanyTypeDAO CreateCompanyTypeDAO()
    174         {
    175             ICompanyTypeDAO dao = null;
    176             if (_DbType == DatabaseType.SqlServer)
    177             {
    178                 dao = new SqlServer.CompanyTypeDAO();
    179             }
    180             else if (_DbType == DatabaseType.MySql)
    181             {
    182                 dao = new MySql.CompanyTypeDAO();
    183             }
    184             else if (_DbType == DatabaseType.Oracole)
    185             {
    186                 dao = new Oracole.CompanyTypeDAO();
    187             }
    188             else if (_DbType == DatabaseType.DB2)
    189             {
    190                 dao = new DB2.CompanyTypeDAO();
    191             }
    192             else if (_DbType == DatabaseType.Postgre)
    193             {
    194                 dao = new Postgre.CompanyTypeDAO();
    195             }
    196             return dao;
    197         }
    198         public IDrugCategoryDAO CreateDrugCategoryDAO()
    199         {
    200             IDrugCategoryDAO dao = null;
    201             if (_DbType == DatabaseType.SqlServer)
    202             {
    203                 dao = new SqlServer.DrugCategoryDAO();
    204             }
    205             else if (_DbType == DatabaseType.MySql)
    206             {
    207                 dao = new MySql.DrugCategoryDAO();
    208             }
    209             else if (_DbType == DatabaseType.Oracole)
    210             {
    211                 dao = new Oracole.DrugCategoryDAO();
    212             }
    213             else if (_DbType == DatabaseType.DB2)
    214             {
    215                 dao = new DB2.DrugCategoryDAO();
    216             }
    217             else if (_DbType == DatabaseType.Postgre)
    218             {
    219                 dao = new Postgre.DrugCategoryDAO();
    220             }
    221             return dao;
    222         }
    223         public IDrugFromDAO CreateDrugFromDAO()
    224         {
    225             IDrugFromDAO dao = null;
    226             if (_DbType == DatabaseType.SqlServer)
    227             {
    228                 dao = new SqlServer.DrugFromDAO();
    229             }
    230             else if (_DbType == DatabaseType.MySql)
    231             {
    232                 dao = new MySql.DrugFromDAO();
    233             }
    234             else if (_DbType == DatabaseType.Oracole)
    235             {
    236                 dao = new Oracole.DrugFromDAO();
    237             }
    238             else if (_DbType == DatabaseType.DB2)
    239             {
    240                 dao = new DB2.DrugFromDAO();
    241             }
    242             else if (_DbType == DatabaseType.Postgre)
    243             {
    244                 dao = new Postgre.DrugFromDAO();
    245             }
    246             return dao;
    247         }
    248         public IDrugsDAO CreateDrugsDAO()
    249         {
    250             IDrugsDAO dao = null;
    251             if (_DbType == DatabaseType.SqlServer)
    252             {
    253                 dao = new SqlServer.DrugsDAO();
    254             }
    255             else if (_DbType == DatabaseType.MySql)
    256             {
    257                 dao = new MySql.DrugsDAO();
    258             }
    259             else if (_DbType == DatabaseType.Oracole)
    260             {
    261                 dao = new Oracole.DrugsDAO();
    262             }
    263             else if (_DbType == DatabaseType.DB2)
    264             {
    265                 dao = new DB2.DrugsDAO();
    266             }
    267             else if (_DbType == DatabaseType.Postgre)
    268             {
    269                 dao = new Postgre.DrugsDAO();
    270             }
    271             return dao;
    272         }
    273         public IResourceDAO CreateResourceDAO()
    274         {
    275             IResourceDAO dao = null;
    276             if (_DbType == DatabaseType.SqlServer)
    277             {
    278                 dao = new SqlServer.ResourceDAO();
    279             }
    280             else if (_DbType == DatabaseType.MySql)
    281             {
    282                 dao = new MySql.ResourceDAO();
    283             }
    284             else if (_DbType == DatabaseType.Oracole)
    285             {
    286                 dao = new Oracole.ResourceDAO();
    287             }
    288             else if (_DbType == DatabaseType.DB2)
    289             {
    290                 dao = new DB2.ResourceDAO();
    291             }
    292             else if (_DbType == DatabaseType.Postgre)
    293             {
    294                 dao = new Postgre.ResourceDAO();
    295             }
    296             return dao;
    297         }
    298         public IStockDAO CreateStockDAO()
    299         {
    300             IStockDAO dao = null;
    301             if (_DbType == DatabaseType.SqlServer)
    302             {
    303                 dao = new SqlServer.StockDAO();
    304             }
    305             else if (_DbType == DatabaseType.MySql)
    306             {
    307                 dao = new MySql.StockDAO();
    308             }
    309             else if (_DbType == DatabaseType.Oracole)
    310             {
    311                 dao = new Oracole.StockDAO();
    312             }
    313             else if (_DbType == DatabaseType.DB2)
    314             {
    315                 dao = new DB2.StockDAO();
    316             }
    317             else if (_DbType == DatabaseType.Postgre)
    318             {
    319                 dao = new Postgre.StockDAO();
    320             }
    321             return dao;
    322         }
    323         public IStorehouseDAO CreateStorehouseDAO()
    324         {
    325             IStorehouseDAO dao = null;
    326             if (_DbType == DatabaseType.SqlServer)
    327             {
    328                 dao = new SqlServer.StorehouseDAO();
    329             }
    330             else if (_DbType == DatabaseType.MySql)
    331             {
    332                 dao = new MySql.StorehouseDAO();
    333             }
    334             else if (_DbType == DatabaseType.Oracole)
    335             {
    336                 dao = new Oracole.StorehouseDAO();
    337             }
    338             else if (_DbType == DatabaseType.DB2)
    339             {
    340                 dao = new DB2.StorehouseDAO();
    341             }
    342             else if (_DbType == DatabaseType.Postgre)
    343             {
    344                 dao = new Postgre.StorehouseDAO();
    345             }
    346             return dao;
    347         }
    348         public IUserDAO CreateUserDAO()
    349         {
    350             IUserDAO dao = null;
    351             if (_DbType == DatabaseType.SqlServer)
    352             {
    353                 dao = new SqlServer.UserDAO();
    354             }
    355             else if (_DbType == DatabaseType.MySql)
    356             {
    357                 dao = new MySql.UserDAO();
    358             }
    359             else if (_DbType == DatabaseType.Oracole)
    360             {
    361                 dao = new Oracole.UserDAO();
    362             }
    363             else if (_DbType == DatabaseType.DB2)
    364             {
    365                 dao = new DB2.UserDAO();
    366             }
    367             else if (_DbType == DatabaseType.Postgre)
    368             {
    369                 dao = new Postgre.UserDAO();
    370             }
    371             return dao;
    372         }
    373         public IDbConnection OpenConnection()
    374         {
    375             IDbConnection conn = System.Data.Common.DbProviderFactories.GetFactory(_ProviderName).CreateConnection();
    376             conn.ConnectionString = _ConnectionString;
    377             conn.Open();
    378             return conn;
    379         }
    380     }
    381 }
    View Code

     3、调用方式

     1 #region 药品
     2         /// <summary>
     3         /// 增加一个药品信息
     4         /// </summary>
     5         /// <param name="drug"></param>
     6         /// <param name="creator"></param>
     7         public void CreateDrug(Drugs drug,string creator)
     8         {
     9             using (IDbConnection conn=DAOFactory.Instance.OpenConnection())
    10             {
    11                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    12                 dao.InsertDrug(drug,conn);
    13             }
    14         }
    15         /// <summary>
    16         /// 保存修改过的药品信息
    17         /// </summary>
    18         /// <param name="drug"></param>
    19         /// <param name="Modifier"></param>
    20         public void SaveDrug(Drugs drug,string Modifier)
    21         {
    22             using (IDbConnection conn=DAOFactory.Instance.OpenConnection())
    23             {
    24                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    25                 dao.UpdateDrug(drug ,conn );
    26             }
    27         }
    28         /// <summary>
    29         /// 删除一个药品信息
    30         /// </summary>
    31         /// <param name="drug"></param>
    32         /// <param name="Deleter"></param>
    33         public void DeleteDrug(Drugs drug, string Deleter)
    34         {
    35             using (IDbConnection conn=DAOFactory.Instance.OpenConnection())
    36             {
    37                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    38                 dao.DeleteDrug(drug.ID,conn);
    39             }
    40         }
    41         /// <summary>
    42         /// 获取所有药品信息
    43         /// </summary>
    44         /// <returns></returns>
    45         public List<Drugs> GetAllDrugs()
    46         {
    47             using (IDbConnection conn=DAOFactory.Instance.OpenConnection())
    48             {
    49                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    50                 return dao.SelectAllDrugs(conn);
    51             }
    52         }
    53         /// <summary>
    54         /// 根据ID查找一个药品信息
    55         /// </summary>
    56         /// <param name="id"></param>
    57         /// <returns></returns>
    58         public Drugs RetrieveDrug(int id)
    59         {
    60             using (IDbConnection conn=DAOFactory.Instance.OpenConnection())
    61             {
    62                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    63                 return dao.SelectDrug(id,conn);
    64             }
    65         }
    66         /// <summary>
    67         /// 获取指定编码的药品
    68         /// </summary>
    69         /// <param name="code"></param>
    70         /// <returns></returns>
    71         public Drugs GetDrugsByCode(string code)
    72         {
    73             using (IDbConnection conn=DAOFactory.Instance.OpenConnection())
    74             {
    75                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    76                 return dao.SelectDrug(code,conn);
    77             }
    78         }
    79         /// <summary>
    80         /// 根据条件进行模糊搜索
    81         /// </summary>
    82         /// <param name="searchCond">搜索条件</param>
    83         /// <returns></returns>
    84         public List<Drugs> SearchDrugs(string searchCond)
    85         {
    86             using (IDbConnection conn = DAOFactory.Instance.OpenConnection())
    87             {
    88                 IDrugsDAO dao = DAOFactory.Instance.CreateDrugsDAO();
    89                 SearchDrugsTemplate template = new SearchDrugsTemplate();
    90                 template.Code = searchCond;
    91                 template.Name = searchCond;
    92                 template.From = searchCond;
    93                 template.Category = searchCond;
    94                 return dao.SearchDrugs(template, conn);
    95             }
    96         }
    97         #endregion
    View Code

     结尾

    因为当时水平很菜,所以这个设计的也存在一些问题,后面发现动软代码生成器生成的架构采用了抽象工厂模式,耦合度更低。

                

  • 相关阅读:
    放缩ImageView
    2017/5/3 afternoon
    2017/5/3 morning
    2017/5/2 afternoon
    2017/5/2 morning
    2017/4/28 afternoon
    2017/4/28 morning
    2017/4/27 afternoon
    2017/4/27 morning
    2017/4/26 afternoon
  • 原文地址:https://www.cnblogs.com/yanglang/p/6636430.html
Copyright © 2011-2022 走看看