转:Oracle,SqlServer,Access数据库通用访问类设计

本项目除用到"实时数据库"外, 还需要用Oracle数据库存储大量的配置信息和生成的数据,而且对Oracle的读取相当的频繁,在项目开始之处,数据访问就是一个很令人烦恼的问题,仅仅数据访问类就修改了好多版本,直到目前正在使用的这个版本.同时为了应付开发过程中不时需要读取SqlServer和Access数据库,所以就写成三种数据源的通用访问类,虽然有点四不象,不过挺省事的,嘻嘻!

此模块分为两个CS文件:
DataFactory.cs

  1using System; 
  2using System.Data; 
  3using System.Data.Common; 
  4using System.Data.SqlClient; 
  5using System.Data.OleDb; 
  6using System.Data.OracleClient; 
  7using System.Collections;
  8
  9namespace REAP.Utility
 10{
 11    public enum DataBaseType
 12    {
 13        Access,
 14        SQLServer,
 15        Oracle
 16    }

 17
 18    /**//// <summary>
 19    /// DataFactory  的摘要说明。
 20    /// </summary>

 21    class DataFactory
 22    {
 23        public DataFactory()
 24        { }
 25
 26        public static IDbConnection CreateConnection(string ConnectionString, DataBaseType dbtype)
 27        {
 28            IDbConnection cnn;
 29
 30            switch (dbtype)
 31            {
 32                case DataBaseType.Access:
 33                    cnn = new OleDbConnection(ConnectionString);
 34                    break;
 35
 36                case DataBaseType.SQLServer:
 37                    cnn = new SqlConnection(ConnectionString);
 38                    break;
 39
 40                case DataBaseType.Oracle:
 41                    cnn = new OracleConnection(ConnectionString);
 42                    break;
 43
 44                default:
 45                    cnn = new SqlConnection(ConnectionString);
 46                    break;
 47            }

 48            return cnn;
 49        }

 50
 51        public static IDbCommand CreateCommand(DataBaseType dbtype, IDbConnection cnn)
 52        {
 53            IDbCommand cmd;
 54            switch (dbtype)
 55            {
 56                case DataBaseType.Access:
 57                    cmd = new OleDbCommand("", (OleDbConnection)cnn);
 58                    break;
 59
 60                case DataBaseType.SQLServer:
 61                    cmd = new SqlCommand("", (SqlConnection)cnn);
 62                    break;
 63
 64                case DataBaseType.Oracle:
 65                    cmd = new OracleCommand("", (OracleConnection)cnn);
 66                    break;
 67                default:
 68                    cmd = new SqlCommand("", (SqlConnection)cnn);
 69                    break;
 70            }

 71
 72            return cmd;
 73        }

 74
 75        public static IDbCommand CreateCommand(string CommandText, DataBaseType dbtype, IDbConnection cnn)
 76        {
 77            IDbCommand cmd;
 78            switch (dbtype)
 79            {
 80                case DataBaseType.Access:
 81                    cmd = new OleDbCommand(CommandText, (OleDbConnection)cnn);
 82                    break;
 83
 84                case DataBaseType.SQLServer:
 85                    cmd = new SqlCommand(CommandText, (SqlConnection)cnn);
 86                    break;
 87
 88                case DataBaseType.Oracle:
 89                    cmd = new OracleCommand(CommandText, (OracleConnection)cnn);
 90                    break;
 91                default:
 92                    cmd = new SqlCommand(CommandText, (SqlConnection)cnn);
 93                    break;
 94            }

 95
 96            return cmd;
 97        }

 98
 99        public static DbDataAdapter CreateAdapter(IDbCommand cmd, DataBaseType dbtype)
100        {
101            DbDataAdapter da;
102            switch (dbtype)
103            {
104                case DataBaseType.Access:
105                    da = new OleDbDataAdapter((OleDbCommand)cmd);
106                    break;
107
108                case DataBaseType.SQLServer:
109                    da = new SqlDataAdapter((SqlCommand)cmd);
110                    break;
111
112                case DataBaseType.Oracle:
113                    da = new OracleDataAdapter((OracleCommand)cmd);
114                    break;
115
116                default:
117                    da = new SqlDataAdapter((SqlCommand)cmd);
118                    break;
119            }

120
121            return da;
122        }

123
124        public static IDataParameter CreateParameter(DataBaseType dbtype)
125        {
126            IDataParameter param = null;
127            switch (dbtype)
128            {
129                case DataBaseType.Access:
130                    param = new OleDbParameter();
131                    break;
132
133                case DataBaseType.SQLServer:
134                    param = new SqlParameter();
135                    break;
136
137                case DataBaseType.Oracle:
138                    param = new OracleParameter();
139                    break;
140
141                default:
142                    param = new SqlParameter();
143                    break;
144            }

145
146            return param;
147        }

148    }

149}

150


DBAccess.cs

  1using System; 
  2using System.Data; 
  3using System.Data.Common; 
  4using System.Data.SqlClient; 
  5using System.Data.OleDb; 
  6using System.Data.OracleClient;
  7using System.Configuration;
  8
  9namespace REAP.Utility
 10{
 11    /**//// <summary>
 12    /// 由于可能会在多种数据源,如ORACLE,SQLSERVER,ACCESS等之间进行切换,
 13    /// 所以将数据源连接字符串和数据源类型定义为类属性,在默认情况下有配置文件定义;
 14    /// 当需要在两种不同的数据源之间进行切换时,可以重新为属性赋值。
 15    /// </summary>

 16    public class DBAccess
 17    {
 18        属性设置属性设置
 59
 60        DataSet生成操作DataSet生成操作
153
154        SQL执行操作SQL执行操作
186
187        DataReader操作DataReader操作
204
205        //其他功能,故意省略
206    }

207}

208
209


举例如下:

默认情况下是访问Oracle数据库,数据库连接字符串已经在Config文件中定义,所以不需要再设置其ConnectionString和DataSourceType属性,此时返回一个DataSet的代码如下:

DBAccess db = new DBAccess();
//同时执行两条查询语句
string strSql = "SELECT * FROM TABLE1;SELECT * FROM TABLE2";
DataSet ds = db.GetDataSet(strSql);
但是如果在程序中需要临时访问SqlServer数据库,则需要设置属性,此时代码如下:

DBAccess db = new DBAccess();
db.ConnectionString = "server=localhost;UID=sa;PWD=123456;DATABASE=Money;connect timeout=120";
db.DataSourceType = DataBaseType.SQLServer;


该文章转载自网络大本营:http://www.xrss.cn/Info/14114.Html

posted on 2008-05-15 16:43  XiaoBei  阅读(495)  评论(0编辑  收藏  举报