当前位置/ List
DevNet帮助中心 >> 曲苑杂坛
DevNet使用外部Oracle组件

发布日期:2013-06-21       浏览:6225 次
    有关.NET操作Oracle数据库,目前一般都使用.NET自带的或者ODAC组件,两种方式都需要使用Oracle客户端的OCI.dll组件,最近网络上找到DataDirect组件,支持Anycpu编译,真正做到了无客户端直接操作Oracle数据库
    有了这个第三方组件,DevNet就需要增加使用第三方数据库操作组件的功能,本文就DevNet使用第三方数据库连接组件做简单介绍
    DevNet的类关系,请参阅DevNet体系
    首先我们继承组件内的DBAccessBase类,然后override几个方法,具体代码见:
折叠C# Code复制内容到剪贴板
  1.  /// <summary>  
  2. /// 自定义Oracle连接类  
  3. /// </summary>  
  4. public class OracleExtDbDirect : DBAccessBase   

这是继承后的类定义
C# Code复制内容到剪贴板
  1.        /// <summary>  
  2.        /// Construct  
  3.        /// </summary>  
  4.        /// <param name="connectionString"></param>  
  5.        public OracleExtDbDirect(string connectionString)  
  6.            : base()  
  7.        {  
  8.            base.con = new OracleConnection(connectionString);  
  9.        }  
  10.   
  11.        /// <summary>  
  12.        /// Construct  
  13.        /// </summary>  
  14.        /// <param name="oracleConn"></param>  
  15.     public OracleExtDbDirect(OracleConnection oracleConn)  
  16.            : base(oracleConn)  
  17.        { }  


继承后的构造函数

override几个方法
C# Code复制内容到剪贴板
  1.         /// <summary>  
  2.         /// Create DbCommandBuilder  
  3.         /// </summary>  
  4.         /// <param name="da"></param>  
  5.         /// <returns></returns>  
  6.         public override System.ComponentModel.Component CreateCommandBuilder(System.Data.Common.DbDataAdapter da)  
  7.         {  
  8.             return new OracleCommandBuilder((OracleDataAdapter)da);  
  9.         }  
  10.   
  11.         /// <summary>  
  12.         /// Create DbDataAdapater  
  13.         /// </summary>  
  14.         /// <param name="selectCmd"></param>  
  15.         /// <returns></returns>  
  16.         public override System.Data.Common.DbDataAdapter CreateDbAdapter(System.Data.Common.DbCommand selectCmd)  
  17.         {  
  18.             return new OracleDataAdapter((OracleCommand)selectCmd);  
  19.         }  
  20.   
  21.         /// <summary>  
  22.         /// Add DbParameter with value  
  23.         /// </summary>  
  24.         /// <param name="cmd"></param>  
  25.         /// <param name="paramName"></param>  
  26.         /// <param name="paramValue"></param>  
  27.         public override void AddCmdParamWithValue(System.Data.Common.DbCommand cmd, string paramName, object paramValue)  
  28.         {  
  29.             ((OracleCommand)cmd).Parameters.AddWithValue(paramName, paramValue);  
  30.         }  

这就是该类所有代码,通过以上类已基本实现了使用第三方组件的功能,使用该类的方法如下:
我们有一个DALEMP数据操作类,那么在该类的构造函数中添加如下代码:
C# Code复制内容到剪贴板
  1. /// <summary>  
  2. /// EMP 表的数据类  
  3. /// </summary>  
  4. public class DALEMP : DataManager<EMP, SearchEMP>  
  5. {  
  6.   
  7.     public DALEMP()  
  8.     {  
  9.         base.DBCon = new DBConnect();  
  10.         base.DBCon.DBAccessBase = new OracleExtDbDirect(base.DBCon.ConnectionString);  
  11.         //参数前缀,sql里为@,Oracle正常为:Mysql里为?,这里设置为?
  12.         base.DBCon.Flag = "?";  
  13.     }  
  14.  }  

ok,则该类的所有方法都实现了使用第三方数据操作组件的功能,appsettings的数据连接配置方式不变,Provider设置为oracleext或none,连接字符串修改为你自己的即可,
你可以在项目中在抽象出来DataManager的子类,DALEMP再继承子类,则修改数据连接则只用修改继承的子类,这样该项目所有的数据连接就都实现了使用第三方组件的功能