• 编写可移植数据访问层


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

    • 定义连接字符串。

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

    • 定义命令和相关参数。

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

      • 返回一组数据。

      • 返回标量值。

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

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

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

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

    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;
          }
       }
    }

     

  • 相关阅读:
    07微博绑定用户接口(我们的约定还算数嘛。)
    08vue 微博回调空页面(最终还是没能留住你。)
    06vue微博回调空页面 (你还会来嘛)
    05微博回调接口 (念念不忘,必有回响吗。)
    04vue获取微博授权url(再也得不到你了。)
    03生成微博授权的url接口(再也没有你了)
    02微博开放平台使用方法 (在哪也不会再遇见你了。)
    01微博三方登录原理讲解(再多三方登录,也看不到你的信息。)
    Django-celery异步短信验证码(0)
    Django之重写用户表注册接口(redis缓存)
  • 原文地址:https://www.cnblogs.com/xiarifeixue/p/1651481.html
Copyright © 2020-2023  润新知