数据库通用连接类

using System;   
using System.Data;   
using System.Data.SqlClient;   
  
namespace DataProviders   
{   
/// <summary>   
/// SqlDataProvider 的摘要说明。   
/// </summary>   
internal class SqlDataProvider : IDataProvider   
{   
private System.Data.SqlClient.SqlConnection sqlConnection;   
private System.Data.SqlClient.SqlCommand sqlCommand;   
private string connectionString;   
public SqlDataProvider() : this(null)   
{   
   //   
   // TODO: 在此处添加构造函数逻辑   
   //   
}   
  
public SqlDataProvider(string connectionString)   
{    
   if (connectionString == null || connectionString.Trim() == string.Empty)   
   {   
    System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();


    this.connectionString = (string)(configurationAppSettings.GetValue("sqlConnectionString", typeof(string)));   
   }   
   else  
   {    
    this.connectionString = connectionString;   
   }       
}   
     
/// <summary>   
/// SQL 连接字符串   
/// </summary>   
public string ConnectionString   
{   
   get  
   {   
    return this.connectionString;   
   }   
   set  
   {   
    this.connectionString = value;   
   }   
}    
    
/// <summary>   
/// 返回一个带有连接字符串的SQL Connection.   
/// </summary>   
/// <returns>OracleConnection</returns>   
private SqlConnection GetSqlConnection()    
{   
   try    
   {   
    return new SqlConnection(this.connectionString);   
   }    
   catch (Exception ex)   
   {  
#if DEBUG   
    System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif   
    return null;   
   }   
}   
  
/// <summary>   
/// 对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1   
/// </summary>   
/// <param name="Sql">UPDATE、INSERT 和 DELETE 语句</param>   
public int ExecuteNonQuery(string sql)   
{   
   using(sqlConnection = this.GetSqlConnection())   
   {   
    if (sqlConnection == null)   
     return -1;   
    try  
    {   
     if (sqlConnection.State == System.Data.ConnectionState.Closed)   
      sqlConnection.Open();        
     sqlCommand = new SqlCommand(sql, sqlConnection);   
     return sqlCommand.ExecuteNonQuery();   
    }   
    catch (Exception ex)   
    {    
#if DEBUG   
     System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif     
     return -1;   
    }       
   }   
}   
  
/// <summary>   
/// 执行查询,并将查询返回的结果集中第一行的第一列作为 .NET Framework 数据类型返回。忽略额外的列或行。   
/// </summary>   
/// <param name="sql">SELECT 语句</param>   
/// <returns>.NET Framework 数据类型形式的结果集第一行的第一列;如果结果集为空或结果为 REF CURSOR,则为空引用</returns>   
public object ExecuteScalar(string sql)   
{      
   using(sqlConnection = this.GetSqlConnection())   
   {   
    if (sqlConnection == null)   
     return null;   
    try  
    {   
     if (sqlConnection.State == System.Data.ConnectionState.Closed)   
      sqlConnection.Open();        
     sqlCommand = new SqlCommand(sql, sqlConnection);   
     return sqlCommand.ExecuteScalar();   
    }   
    catch (Exception ex)   
    {   
#if DEBUG   
     System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif    
     return null;   
    }       
   }   
}   
    
/// <summary>   
/// 执行单Sql语句查询,并将查询返回的结果作为一个数据集返回   
/// </summary>   
/// <param name="sql">SELECT 语句</param>   
/// <returns>数据集 DataSet</returns>    
public DataSet RetriveDataSet(string sql)   
{      
   if (sql == null || sql == string.Empty)   
   {  
#if DEBUG   
    System.Diagnostics.Debug.WriteLine("sql 为空");   
#endif   
    return null;   
   }      
   using(sqlConnection = this.GetSqlConnection())   
   {     
    if (sqlConnection == null)   
     return null;   
    using(SqlDataAdapter da = new SqlDataAdapter(sql, sqlConnection))   
    {   
     DataSet ds = new DataSet();   
     try  
     {   
      da.Fill(ds);   
     }        
     catch (Exception ex)   
     {  
#if DEBUG   
      System.Diagnostics.Debug.WriteLine(ex.ToString());   
#endif   
     }        
     return ds;   
    }      
   }      
}    
    
/// <summary>   
/// 执行Sql数组语句查询,并将查询返回的结果作为一个数据集返回   
/// </summary>   
/// <param name="sql">Select 语句数组</param>   
/// <param name="tableName">TableName</param>   
/// <returns>数据集 DataSet</returns>   
public DataSet RetriveDataSet(string[] sql, params string[] tableName)   
{   
   int sqlLength;   
   sqlLength = sql.Length;   
   if ( sqlLength == 0)   
   {  
#if DEBUG   
    System.Diagnostics.Debug.WriteLine("sql 为空");  
#endif   
    return null;   
   }     
   using(sqlConnection = this.GetSqlConnection())   
   {     
    if (sqlConnection == null)   
     return null;   
    DataSet ds = new DataSet();   
    int tableNameLength = tableName.Length;   
    for (int i = 0; i < sqlLength; i++)   
    {   
     using(SqlDataAdapter da = new SqlDataAdapter(sql[i], sqlConnection))   
     {    
      try  
      {         
       if (i < tableNameLength)   
        da.Fill(ds, tableName[i]);   
       else  
        da.Fill(ds, "table" + i);          
      }         
      catch (Exception ex)   
      {  
#if DEBUG   
       System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif   
       return null;   
      }   
     }    
    }   
    return ds;     
   }      
}   
  
public DataSet UpdateDataSet(string sql, DataSet hasChangesDataSet)   
{   
   return null;   
}   
  
public void Dispose()   
{   
   this.connectionString = null;   
   this.sqlCommand.Dispose();   
   this.sqlConnection.Dispose();   
}   
  
}   
}   
  
OdbcDataProvider.cs 提供ODBC连接访问的类  

#define DEBUG   
using System;   
using System.Data;   
using System.Data.Odbc;   
namespace FenceKing.DataProviders   
{   
/// <summary>   
/// OdbcDataProvider 的摘要说明。   
/// </summary>   
internal class OdbcDataProvider : IDataProvider   
{   
private System.Data.Odbc.OdbcConnection odbcConnection;   
private System.Data.Odbc.OdbcCommand odbcCommand;   
private string connectionString;   
public OdbcDataProvider() : this(null)   
{   
   //   
   // TODO: 在此处添加构造函数逻辑   
   //   
}   
  
public OdbcDataProvider(string connectionString)   
{    
   if (connectionString == null || connectionString.Trim() == string.Empty)   
   {   
    System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();


    this.connectionString = (string)(configurationAppSettings.GetValue("odbcConnectionString", typeof(string)));   
   }   
   else  
   {    
    this.connectionString = connectionString;   
   }       
}   
     
/// <summary>   
/// Oracle 连接字符串 "User Id=southfence;Data Source=FENCEORA;Password=southfence;Persist Security Info=true;"   

   
/// </summary>   
public string ConnectionString   
{   
   get  
   {   
    return this.connectionString;   
   }   
   set  
   {   
    this.connectionString = value;   
   }   
}    
    
/// <summary>   
/// 返回一个带有连接字符串的Odbc Connection.   
/// </summary>   
/// <returns>OracleConnection</returns>   
private OdbcConnection GetOdbcConnection()    
{   
   try    
   {   
    return new OdbcConnection(this.connectionString);   
   }    
   catch (Exception ex)   
   {  
#if DEBUG   
    System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif    
    return null;   
   }   
}   
  
/// <summary>   
/// 对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1   
/// </summary>   
/// <param name="Sql">UPDATE、INSERT 和 DELETE 语句</param>   
public int ExecuteNonQuery(string sql)   
{   
   using(odbcConnection = this.GetOdbcConnection())   
   {   
    if (odbcConnection == null)   
     return -1;   
    try  
    {   
     if (odbcConnection.State == System.Data.ConnectionState.Closed)   
      odbcConnection.Open();        
     odbcCommand = new OdbcCommand(sql, odbcConnection);   
     return odbcCommand.ExecuteNonQuery();   
    }   
    catch (Exception ex)   
    {   
#if DEBUG   
     System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif   
     return -1;   
    }       
   }   
}   
  
/// <summary>   
/// 执行查询,并将查询返回的结果集中第一行的第一列作为 .NET Framework 数据类型返回。忽略额外的列或行。   
/// </summary>   
/// <param name="sql">SELECT 语句</param>   
/// <returns>.NET Framework 数据类型形式的结果集第一行的第一列;如果结果集为空或结果为 REF CURSOR,则为空引用

</returns>   
public object ExecuteScalar(string sql)   
{      
   using(odbcConnection = this.GetOdbcConnection())   
   {   
    if (odbcConnection == null)   
     return null;   
    try  
    {   
     if (odbcConnection.State == System.Data.ConnectionState.Closed)   
      odbcConnection.Open();   
     odbcCommand = new OdbcCommand(sql, odbcConnection);   
     return odbcCommand.ExecuteScalar();   
    }   
    catch (Exception ex)   
    {   
#if DEBUG   
     System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif   
     return null;   
    }       
   }   
}   
  
/// <summary>   
/// 执行单Sql语句查询,并将查询返回的结果作为一个数据集返回   
/// </summary>   
/// <param name="selectSql">SELECT 语句</param>   
/// <returns>数据集 DataSet</returns>   
public DataSet RetriveDataSet(string sql)   
{      
   if (sql == null || sql == string.Empty)   
   {  
#if DEBUG   
    System.Diagnostics.Debug.WriteLine("sql 为空");      
#endif   
    return null;   
   }      
   using(odbcConnection = this.GetOdbcConnection())   
   {     
    if (odbcConnection == null)   
     return null;   
    using( OdbcDataAdapter da = new OdbcDataAdapter(sql, odbcConnection))   
    {   
     DataSet ds = new DataSet();   
     try  
     {   
      da.Fill(ds);   
     }        
     catch (Exception ex)   
     {  
#if DEBUG   
      System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif   
      return null;   
     }        
     return ds;   
    }      
   }      
}   
  
  
/// <summary>   
/// 执行Sql数组语句查询,并将查询返回的结果作为一个数据集返回   
/// </summary>   
/// <param name="sql">Select 语句数组</param>   
/// <param name="tableName">TableName</param>   
/// <returns>数据集 DataSet</returns>   
public DataSet RetriveDataSet(string[] sql, params string[] tableName)   
{   
   int sqlLength;   
   sqlLength = sql.Length;   
   if ( sqlLength == 0)   
   {  
#if DEBUG   
    System.Diagnostics.Debug.WriteLine("sql 为空");  
#endif   
    return null;   
   }     
   using(odbcConnection = this.GetOdbcConnection())   
   {     
    if (odbcConnection == null)   
     return null;   
    DataSet ds = new DataSet();   
    int tableNameLength = tableName.Length;   
    for (int i = 0; i < sqlLength; i++)   
    {   
     using(OdbcDataAdapter da = new OdbcDataAdapter(sql[i], odbcConnection))   
     {    
      try  
      {    
       if (i < tableNameLength)   
        da.Fill(ds, tableName[i]);   
       else  
        da.Fill(ds, "table" + i);         
      }         
      catch (Exception ex)   
      {  
#if DEBUG   
       System.Diagnostics.Debug.WriteLine(ex.ToString());  
#endif   
      }   
     }    
    }   
    return ds;     
   }      
}   
  
public DataSet UpdateDataSet(string sql, DataSet hasChangesDataSet)   
{   
   return null;   
}   
  
  
public void Dispose()   
{   
   this.connectionString = null;   
   this.odbcCommand.Dispose();   
   this.odbcConnection.Dispose();      
}   
}   
}

转载于:https://www.cnblogs.com/yexinw/archive/2011/04/07/2007386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值