zoukankan      html  css  js  c++  java
  • 编写可移植数据访问层

    数据提供程序基本接口标识应用程序与数据源进行交互通常所需的典型行为:

    • 定义连接字符串。

    • 打开和关闭与数据源的物理连接。

    • 定义命令和相关参数。

    • 执行可以创建的不同种类的命令。

      • 返回一组数据。

      • 返回标量值。

      • 对数据执行操作但不返回任何内容。

    • 对返回的数据集提供只向前型访问和只读型访问。

    • 定义使数据集与数据源(数据适配器)的内容保持同步所需的一组操作。

    将检索、插入、更新和删除不同数据源(使用不同的数据提供程序)中的信息所需的各种操作封装在数据访问层中,并且只公开基本接口的成员,则可以实现第一级抽象-至少从数据提供程序的角度来看是这样。让我们看一看以下演示该设计思想的代码:

    using System;
    using System.Data;
    using System.Data.Common;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using System.Data.OracleClient;


    namespace DAL
    {
       public enum DatabaseType
       {
          Access,
          SQLServer,
          Oracle
          // 任何其他数据源类型
       }

       public enum ParameterType
       {
          Integer,
          Char,
          VarChar
          // 定义公用参数类型集
       }

       public class DataFactory
       {
          private DataFactory(){}

          public static IDbConnection CreateConnection
             (string ConnectionString,
             DatabaseType dbtype)
          {
             IDbConnection cnn;

             switch(dbtype)
             {
                case DatabaseType.Access:
                   cnn = new OleDbConnection
                      (ConnectionString);
                   break;
                case DatabaseType.SQLServer:
                   cnn = new SqlConnection
                      (ConnectionString);
                   break;
                case DatabaseType.Oracle:
                   cnn = new OracleConnection
                      (ConnectionString);
                   break;
                default:
                   cnn = new SqlConnection
                      (ConnectionString);
                   break;              
             }

             return cnn;
          }


          public static IDbCommand CreateCommand
             (string CommandText, DatabaseType dbtype,
             IDbConnection cnn)
          {
             IDbCommand cmd;
             switch(dbtype)
             {
                case DatabaseType.Access:
                   cmd = new OleDbCommand
                      (CommandText,
                      (OleDbConnection)cnn);
                   break;

                case DatabaseType.SQLServer:
                   cmd = new SqlCommand
                      (CommandText,
                      (SqlConnection)cnn);
                   break;

                case DatabaseType.Oracle:
                   cmd = new OracleCommand
                      (CommandText,
                      (OracleConnection)cnn);
                   break;
                default:
                   cmd = new SqlCommand
                      (CommandText,
                      (SqlConnection)cnn);
                   break;
             }

             return cmd;
          }


          public static DbDataAdapter CreateAdapter
             (IDbCommand cmd, DatabaseType dbtype)
          {
             DbDataAdapter da;
             switch(dbtype)
             {
                case DatabaseType.Access:
                   da = new OleDbDataAdapter
                      ((OleDbCommand)cmd);
                   break;

                case DatabaseType.SQLServer:
                   da = new SqlDataAdapter
                      ((SqlCommand)cmd);
                   break;

                case DatabaseType.Oracle:
                   da = new OracleDataAdapter
                      ((OracleCommand)cmd);
                   break;

                default:
                   da = new SqlDataAdapter
                      ((SqlCommand)cmd);
                   break;
             }

             return da;
          }
       }
    }

     

  • 相关阅读:
    Lc1049_最后一块石头的重量II
    Lc343_整数拆分
    MySQL使用Limit关键字限制查询结果的数量效率问题
    Lc62_不同路径
    Java几种序列化方式对比
    3、你平时工作用过的JVM常用基本配置参数有哪些?
    2、你说你做过JVM调优和参数配置,请问如何盘点查看MM系统默认值
    强引用、软引用、弱引用、虚引用分别是什么?
    零拷贝
    并发编程面试题-锁的优化 和 happen-before原则
  • 原文地址:https://www.cnblogs.com/xiarifeixue/p/1651481.html
Copyright © 2011-2022 走看看