`
pake007
  • 浏览: 58407 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

.NET通用访问数据库类(一)

阅读更多

在数据库应用程序的开发中,往往一个应用程序要从多个数据库中取得所要的业务数据。对于ADO.NET更是如此,一个DataSet,可能是从几个数据库中取得的数据集合。为此开发一个访问数据库通用接口显得更为方便、灵活。下面是一个针对.NET提供的四种访问数据库的通用类,每个类都有具体实现了一些常用访问数据库的方法。

DataProvider.cs 此类返回一个访问数据库的接口实例。

c# 代码
  1. #define DEBUG   
  2. using System;   
  3. namespace DataProviders   
  4. {   
  5.  /// <summary></summary>   
  6.  /// 提供对数据库访问的通用类。   
  7.  ///    
  8.  public class DataProvider   
  9.  {    
  10.   /// <summary></summary>   
  11.   /// 数据库枚举类型   
  12.   ///    
  13.   public enum DataProviderType   
  14.   {   
  15.    OdbcDataProvider = 0,   
  16.    OleDbDataProvider = 1,   
  17.    OracleDataProvider = 2,   
  18.    SqlDataProvider = 3     
  19.   }   
  20.   
  21.   /// <summary></summary>   
  22.   /// 建立访问数据库的实例   
  23.   ///    
  24.   /// 数据库枚举类型   
  25.   /// <returns></returns>   
  26.   public static IDataProvider CreateDataProvider(DataProviderType dataProviderType)   
  27.   {   
  28.    switch (dataProviderType)   
  29.    {   
  30.     case DataProviderType.OdbcDataProvider:   
  31.      return new OdbcDataProvider();        
  32.     case DataProviderType.OleDbDataProvider:   
  33.      return new OleDbDataProvider();      
  34.     case DataProviderType.OracleDataProvider:   
  35.      return new OracleDataProvider();        
  36.     case DataProviderType.SqlDataProvider:   
  37.      return new SqlDataProvider();        
  38.     default:  
  39. #if DEBUG   
  40.      System.Diagnostics.Debug.WriteLine("dataProviderType 类型不存在!");  
  41. #endif    
  42.      return null;   
  43.    }   
  44.   }   
  45.   
  46.  }   
  47. }   
  48.   

 

IDataProvider.cs 访问数据库的接口类

c# 代码
  1. using System;   
  2.   
  3. namespace DataProviders   
  4. {   
  5.  /// <summary></summary>   
  6.  /// 对数据库访问的通用接口   
  7.  ///    
  8.  public interface IDataProvider   
  9.  {    
  10.   /// <summary></summary>   
  11.   /// 执行 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数   
  12.   ///      
  13.   int ExecuteNonQuery(string sql);   
  14.   
  15.   /// <summary></summary>   
  16.   /// 执行查询,并将查询返回的结果集中第一行的第一列作为 .NET Framework 数据类型返回。忽略额外的列或行   
  17.   ///      
  18.   object ExecuteScalar(string sql);   
  19.      
  20.   /// <summary></summary>   
  21.   ///  执行单Sql语句查询,并将查询返回的结果作为一个数据集返回   
  22.   ///      
  23.   System.Data.DataSet RetriveDataSet(string sql);    
  24.      
  25.   /// <summary></summary>   
  26.   ///  执行Sql数组语句查询,并将查询返回的结果作为一个数据集返回     
  27.   ///      
  28.   System.Data.DataSet RetriveDataSet(string[] sql, params string[] tableName);   
  29.   
  30.   /// <summary></summary>   
  31.   /// 更新库   
  32.   ///    
  33.   ///    
  34.   ///    
  35.   /// <returns></returns>   
  36.   System.Data.DataSet UpdateDataSet(string sql, System.Data.DataSet hasChangesDataSet);   
  37.   
  38.   /// <summary></summary>   
  39.   /// 执行Dispose   
  40.   ///    
  41.   void Dispose();     
  42.  }   
  43. }   
  44.   

 

OracleDataProvider.cs 访问Oracle的类

c# 代码
  1. #define DEBUG   
  2. using System;   
  3. using System.Data;   
  4. using System.Data.OracleClient;   
  5.   
  6. namespace DataProviders   
  7. {   
  8.  /// <summary></summary>   
  9.  /// OracleDataProvider 的摘要说明。   
  10.  ///    
  11.  internal class OracleDataProvider : IDataProvider   
  12.  {   
  13.   private System.Data.OracleClient.OracleConnection oracleConnection;   
  14.   private System.Data.OracleClient.OracleCommand oracleCommand;   
  15.   private string connectionString;   
  16.   public OracleDataProvider() : this(null)   
  17.   {   
  18.    //   
  19.    // TODO: 在此处添加构造函数逻辑   
  20.    //   
  21.   }   
  22.   
  23.   public OracleDataProvider(string connectionString)   
  24.   {    
  25.    if (connectionString == null || connectionString.Trim() == string.Empty)   
  26.    {   
  27.     System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();   
  28.     this.connectionString = (string)(configurationAppSettings.GetValue("oracleConnectionString"typeof(string)));   
  29.    }   
  30.    else  
  31.    {    
  32.     this.connectionString = connectionString;   
  33.    }       
  34.   }   
  35.      
  36.   /// <summary></summary>   
  37.   /// Oracle 连接字符串 "User Id=southfence;Data Source=FENCEORA;Password=southfence;Persist Security Info=true;"       
  38.   ///    
  39.   public string ConnectionString   
  40.   {   
  41.    get{   
  42.     return this.connectionString;   
  43.    }   
  44.    set{   
  45.     this.connectionString = value;   
  46.    }   
  47.   }    
  48.     
  49.   /// <summary></summary>   
  50.   /// 返回一个带有连接字符串的Oracle Connection.   
  51.   ///    
  52.   /// <returns></returns>OracleConnection   
  53.   private OracleConnection GetOracleConnection()    
  54.   {   
  55.    try    
  56.    {   
  57.     return new OracleConnection(this.connectionString);   
  58.    }    
  59.    catch (Exception ex)   
  60.    {  
  61. #if DEBUG   
  62.     System.Diagnostics.Debug.WriteLine(ex.ToString());  
  63. #endif   
  64.     return null;   
  65.    }   
  66.   }   
  67.   
  68.   /// <summary></summary>   
  69.   /// 对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1   
  70.   ///    
  71.   /// UPDATE、INSERT 和 DELETE 语句   
  72.   public int ExecuteNonQuery(string sql)   
  73.   {   
  74.    using(oracleConnection = this.GetOracleConnection())   
  75.    {   
  76.     if (oracleConnection == null)   
  77.      return -1;   
  78.     int rv = -1;   
  79.     OracleTransaction oracleTransaction = null;      
  80.     try  
  81.     {   
  82.      if (oracleConnection.State == System.Data.ConnectionState.Closed)   
  83.       oracleConnection.Open();        
  84.      oracleCommand = new OracleCommand(sql, oracleConnection);       
  85.      oracleTransaction = oracleConnection.BeginTransaction();   
  86.      oracleCommand.Transaction = oracleTransaction;   
  87.      rv = oracleCommand.ExecuteNonQuery();   
  88.      oracleTransaction.Commit();        
  89.     }   
  90.     catch (Exception ex)   
  91.     {       
  92. #if DEBUG   
  93.      System.Diagnostics.Debug.WriteLine(ex.ToString());  
  94. #endif   
  95.      oracleTransaction.Rollback();   
  96.      rv = -1;   
  97.     }       
  98.   
  99.     return rv;   
  100.    }   
  101.   }   
  102.   
  103.   /// <summary></summary>   
  104.   /// 执行查询,并将查询返回的结果集中第一行的第一列作为 .NET Framework 数据类型返回。忽略额外的列或行。   
  105.   ///    
  106.   /// SELECT 语句   
  107.   /// <returns></returns>.NET Framework 数据类型形式的结果集第一行的第一列;如果结果集为空或结果为 REF CURSOR,则为空引用   
  108.   public object ExecuteScalar(string sql)   
  109.   {      
  110.    using(oracleConnection = this.GetOracleConnection())   
  111.    {   
  112.     if (oracleConnection == null)   
  113.      return null;   
  114.     try  
  115.     {   
  116.      if (oracleConnection.State == System.Data.ConnectionState.Closed)   
  117.       oracleConnection.Open();        
  118.      oracleCommand = new OracleCommand(sql, oracleConnection);   
  119.      return oracleCommand.ExecuteScalar();   
  120.     }   
  121.     catch (Exception ex)   
  122.     {       
  123. #if DEBUG   
  124.      System.Diagnostics.Debug.WriteLine(ex.ToString());  
  125. #endif   
  126.      return null;   
  127.     }       
  128.    }   
  129.   }   
  130.   
  131.   /// <summary></summary>   
  132.   ///  执行单Sql语句查询,并将查询返回的结果作为一个数据集返回   
  133.   ///    
  134.   /// SELECT 语句   
  135.   /// <returns></returns>数据集 DataSet   
  136.   public DataSet RetriveDataSet(string sql)   
  137.   {      
  138.    if (sql == null || sql == string.Empty)   
  139.    {  
  140. #if DEBUG   
  141.     System.Diagnostics.Debug.WriteLine("sql 为空");      
  142. #endif   
  143.     return null;   
  144.    }      
  145.    using(oracleConnection = this.GetOracleConnection())   
  146.    {     
  147.     if (oracleConnection == null)   
  148.      return null;   
  149.     using( OracleDataAdapter da = new OracleDataAdapter(sql, oracleConnection))   
  150.     {   
  151.      DataSet ds = new DataSet();   
  152.      try  
  153.      {   
  154.       da.Fill(ds);   
  155.      }        
  156.      catch (Exception ex)   
  157.      {  
  158. #if DEBUG   
  159.       System.Diagnostics.Debug.WriteLine(ex.ToString());  
  160. #endif   
  161.      }        
  162.      return ds;   
  163.     }      
  164.    }      
  165.   }    
  166.     
  167.   /// <summary></summary>   
  168.   /// 执行Sql数组语句查询,并将查询返回的结果作为一个数据集返回   
  169.   ///    
  170.   /// Select 语句数组   
  171.   /// TableName   
  172.   /// <returns></returns>数据集 DataSet   
  173.   public DataSet RetriveDataSet(string[] sql, params string[] tableName)   
  174.   {   
  175.    int sqlLength;      
  176.    sqlLength = sql.Length;   
  177.    if ( sqlLength == 0)   
  178.    {  
  179. #if DEBUG   
  180.     System.Diagnostics.Debug.WriteLine("sql 为空");  
  181. #endif   
  182.     return null;   
  183.    }    
  184.    using(oracleConnection = this.GetOracleConnection())   
  185.    {     
  186.     if (oracleConnection == null)   
  187.      return null;   
  188.     DataSet ds = new DataSet();   
  189.     int tableNameLength = tableName.Length;   
  190.     for (int i = 0; i < sqlLength; i++)   
  191.     {   
  192.      using(OracleDataAdapter da = new OracleDataAdapter(sql[i], oracleConnection))   
  193.      {    
  194.       try  
  195.       {          
  196.        if (i < tableNameLength)   
  197.         da.Fill(ds, tableName[i]);   
  198.        else  
  199.         da.Fill(ds, "table" + i);          
  200.       }        
  201.       catch (Exception ex)   
  202.       {  
  203. #if DEBUG   
  204.        System.Diagnostics.Debug.WriteLine(ex.ToString());  
  205. #endif   
  206.        return null;   
  207.       }   
  208.      }    
  209.     }   
  210.     return ds;     
  211.    }      
  212.   }   
  213.   
  214.   /// <summary></summary>   
  215.   /// 更新数据集.    
  216.   /// 过程:客户层(dataSet.GetChanges()) -- 修改 --> 数据服务层(hasChangesDataSet.update()) -- 更新--> 数据层(hasChangesDataSet) ...   
  217.   ///  数据层(hasChangesDataSet) -- 新数据 --> 数据服务层 (hasChangesDataSet) -- 合并 -- > 客户层(dataSet.Merge(hasChangesDataSet))   
  218.   ///    
  219.   ///    
  220.   /// <returns></returns>   
  221.   public DataSet UpdateDataSet(string sql, DataSet hasChangesDataSet)   
  222.   {   
  223.          
  224.   }   
  225.   
  226.   /// <summary></summary>   
  227.   ///  执行Sql数组语句查询,并将查询返回的结果作为一个数据读取器返回   
  228.   ///    
  229.   ///    
  230.   /// <returns></returns>OracleDataReader   
  231.   public OracleDataReader RetriveDataReader(string sql)   
  232.   {   
  233.    if (sql == null || sql == string.Empty)   
  234.    {  
  235. #if DEBUG   
  236.     System.Diagnostics.Debug.WriteLine("sql 为空");      
  237. #endif   
  238.     return null;   
  239.    }      
  240.    using(oracleConnection = this.GetOracleConnection())   
  241.    {     
  242.     if (oracleConnection == null)   
  243.      return null;   
  244.     using(oracleCommand = new OracleCommand(sql, oracleConnection))   
  245.     {      
  246.      try  
  247.      {   
  248.       OracleDataReader oracleDataReader = oracleCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);   
  249.       return oracleDataReader;   
  250.      }        
  251.      catch (Exception ex)   
  252.      {  
  253. #if DEBUG   
  254.       System.Diagnostics.Debug.WriteLine(ex.ToString());  
  255. #endif   
  256.       return null;   
  257.   
  258.      }   
  259.     }    
  260.    }      
  261.   }   
  262.   
  263.   public void Dispose()   
  264.   {   
  265.    this.connectionString = null;   
  266.    this.oracleCommand.Dispose();   
  267.    this.oracleConnection.Dispose();   
  268.   }   
  269.  }   
  270. }     

 

(未完待续。。。)

分享到:
评论

相关推荐

    通用.NET数据库访问类

    这个"通用.NET数据库访问类"是一个设计用于简化数据库操作的C#代码库。它遵循面向接口编程的原则,这使得代码更具有可扩展性和可维护性。下面将详细介绍这个数据库访问类的关键知识点。 首先,接口(Interface)在...

    ASP.NET通用数据库访问组件

    在ASP.NET中,数据库访问通常涉及ADO.NET(ActiveX Data Objects .NET),这是一个用于访问数据库的组件集。然而,直接使用ADO.NET可能需要编写大量的重复代码,尤其是在处理多种数据库时。这就是为什么开发通用...

    Asp.net通用自定义数据库访问类的设计和实现

    总的来说,Asp.NET通用自定义数据库访问类的设计和实现涉及到了Web开发的多个核心技术和原则。通过合理的设计和实现,我们可以构建出高效、稳定且易于维护的管理信息系统,满足研究生信息管理的需求。在实际开发过程...

    SQL数据库通用访问类(ASP.NET)

    本文将深入探讨一个专门为ASP.NET设计的SQL数据库通用访问类的实现与应用,通过分析其关键代码片段,我们将理解其工作原理、优势以及如何将其整合到自己的项目中。 #### SQL数据库通用访问类概述 SQL数据库通用...

    .net 通用数据库访问类(优化版 增加MySql)源码

    总的来说,这个".NET通用数据库访问类(优化版 增加MySQL)源码"项目旨在提供一个跨数据库平台的解决方案,通过统一的接口和配置管理,降低多数据库环境下的开发复杂度。开发者可以根据需求,轻松切换数据库系统,同时...

    c# .net 通用sql数据库访问的类

    c# .net 通用sql数据库访问的类 比较全,有注释

    .NET构建通用数据库访问类

    ### .NET构建通用数据库访问类 在.NET框架中构建一个通用的数据库访问层(DAL)是许多企业级应用中的常见需求。这样的一个访问层能够帮助开发者以一种抽象、统一的方式与不同的数据库系统进行交互,例如SQL Server...

    asp.net 通用数据访问类

    在ASP.NET开发中,创建一个通用数据访问类是提高代码复用性和降低维护成本的重要实践。这个类通常封装了数据库连接、SQL语句执行、事务处理等基础操作,使得业务逻辑层无需直接与数据库交互,从而实现解耦。以下是...

    基于ASP.NET技术的数据库访问通用类设计

    ASP.NET是新一代的B/S系统编程工具,集众多优点于一身,在时数据库的操作上更是功能强大。但是传统的数据访问编程方式操作繁琐,而且重复累赘。...介绍了一种基于ASP.NET技术的数据库访问通用类设计方法

    .net 平台 通用的数据库访问类

    ;database=Grant_Manage;uid=sa;pwd=;" providerName="System.Data.SqlClient"/&gt; &lt;/connectionStrings&gt;

    asp.net的通用数据库访问层源码

    最大特点是简单,使用方便,没有其它DAL那种复杂的配置及使用,如果你正在找一个使用简单,能节省大量时间的数据库访问层,这个也许就是你要找的。13.该类库仅仅是把对数据库操作的常用代码封装而已,并没有真正意义...

    .net oracle数据库访问类

    本教程将详细讲解如何使用ASP.NET创建一个Oracle数据库访问的通用类,主要关注`OracleHelper.cs`这个文件。 首先,`OracleHelper.cs`通常是一个静态类,它封装了Oracle数据库操作的基本方法,如执行SQL查询、存储...

    ASP.NET 通用数据库访问 日志组件

    在这个"ASP.NET 通用数据库访问 日志组件"中,我们关注的核心是数据库访问和日志管理两个方面。 1. **数据库访问**: 在ASP.NET中,数据库访问通常通过ADO.NET或者Entity Framework等数据访问技术实现。ADO.NET是...

    vb.net 数据库访问类

    在VB.NET中,开发人员通常会创建一个通用的数据库访问类来封装所有与数据库相关的操作,例如查询、插入、更新和删除等。这种做法有助于简化代码并提高可维护性。本节将详细介绍如何构建这样的类,并提供具体的代码...

    精心整理的几个ASP.NET通用类

    在这个精心整理的压缩包中,包含了四个核心的ASP.NET通用类,分别用于数据库操作、字符串操作、文件操作以及JavaScript操作。这些类为开发者提供了方便快捷的工具,使得在ASP.NET项目中的常见任务能够更加高效地执行...

    .NET通用数据库访问类(支持存储过程)

    标题中的".NET通用数据库访问类(支持存储过程)"是指一种.NET框架下的编程工具,它提供了一个统一的接口,使得开发者可以方便地访问多种类型的数据库,包括SQLServer、Oracle、MySQL、SQLite、ACCESS以及DB2。...

    ado.net通用数据库访问层

    ADO.NET通用数据库访问层是一种设计模式,用于抽象和封装数据库操作,从而实现应用程序与特定数据库管理系统(DBMS)之间的解耦。这种设计使得开发者无需直接与SQL语句或特定数据库API交互,而是通过一个统一的接口来...

    .net 访问DB2数据库不为人知的秘密_吐血奉献

    这使得远程客户端可以使用 Administration Client、Runtime Client 或 Application Development Client 访问数据库服务器。Application Development Client 组件是一个为数据库应用程序开发者设计的工具集合,包括库...

    利用ADO.NET的体系架构打造通用的数据库访问通用类

    ### 利用ADO.NET的体系架构打造通用的数据库访问通用...通过以上介绍,我们可以看到利用ADO.NET体系架构来构建通用的数据库访问类是一种高效且灵活的方式,不仅提高了代码的复用率,也增强了系统的可维护性和可扩展性。

    .net 通用数据库访问类(优化版)源码

    通用数据库访问类(优化版)源码 通用数据库访问类 通过配置 可实现不同数据库的的访问&def目前实现了SQLserver&def Oracle&def DataAccess 这可节略大量数据库访问代码&def配合我的代码生活成器...

Global site tag (gtag.js) - Google Analytics