C Implementation Access Universal Access Class OleDbHelper Complete Instance

  • 2021-12-05 07:02:48
  • OfStack

This article illustrates how C # implements the Access universal access class OleDbHelper. Share it for your reference, as follows:

Recently, I am working on a project database using Access. The first time you use the Access database, I didn't go well at first, The operation of the database is slightly different from that of SqlServer, However, the information obtained from exception tracking is meaningless. After several days of repeated search for problems, some problems were finally solved. In order to access Access database, I wrote a class for special access to operate the database, including executing database commands, returning DataSet, returning a single record, returning DataReader, general paging methods and other commonly used operation methods. Please put forward your opinions so that I can improve this class. Although it refers to SqlHelper, it is much simpler than it. All the codes are as follows:


using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
namespace Common
{
  /// <summary>
  /// OleDb  Stack access class 
  /// </summary>
  public static class OleDbHelper
  {
    /// <summary>
    /// Access  Database connection string format of .
    /// </summary>
    public const string ACCESS_CONNECTIONSTRING_TEMPLATE = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};";
    // Hashtable to store cached parameters
    private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
    /// <summary>
    ///  Aim at  System.Data.OleDb.OleDbCommand.Connection  Execute  SQL  Statement and returns the number of affected rows .
    /// </summary>
    /// <param name="connString"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      using (OleDbConnection conn = new OleDbConnection(connString))
      {
        PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.Open);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
      }
    }
    /// <summary>
    ///  Aim at  System.Data.OleDb.OleDbCommand.Connection  Execute  SQL  Statement and returns the number of affected rows .
    /// </summary>
    /// <param name="conn"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static int ExecuteNonQuery(OleDbConnection conn, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.AutoDetection);
      int val = cmd.ExecuteNonQuery();
      cmd.Parameters.Clear();
      return val;
    }
    /// <summary>
    ///  Aim at  System.Data.OleDb.OleDbCommand.Connection  Execute  SQL  Statement and returns the number of affected rows .
    /// </summary>
    /// <param name="trans"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static int ExecuteNonQuery(OleDbTransaction trans, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms, ConnectionActionType.None);
      int val = cmd.ExecuteNonQuery();
      cmd.Parameters.Clear();
      return val;
    }
    /// <summary>
    ///  Will  System.Data.OleDb.OleDbCommand.CommandText  Send to  System.Data.OleDb.OleDbCommand.Connection  And generate 1 A  System.Data.OleDb.OleDbDataReader.
    /// </summary>
    /// <param name="connString"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static OleDbDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      OleDbConnection conn = new OleDbConnection(connString);
      try
      {
        PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.Open);
        OleDbDataReader rdr = cmd.ExecuteReader();
        cmd.Parameters.Clear();
        return rdr;
      }
      catch
      {
        conn.Close();
        throw;
      }
    }
    /// <summary>
    ///  Will  System.Data.OleDb.OleDbCommand.CommandText  Send to  System.Data.OleDb.OleDbCommand.Connection  And generate 1 A  System.Data.OleDb.OleDbDataReader.
    /// </summary>
    /// <param name="conn"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static OleDbDataReader ExecuteReader(OleDbConnection conn, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      try
      {
        PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.AutoDetection);
        OleDbDataReader rdr = cmd.ExecuteReader();
        cmd.Parameters.Clear();
        return rdr;
      }
      catch
      {
        conn.Close();
        throw;
      }
    }
    /// <summary>
    ///  Executes the query and returns the first in the result set returned by the query 1 The first of the line 1 Column. Ignore other columns or rows .
    /// </summary>
    /// <param name="connString"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static object ExecuteScalar(string connString, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      using (OleDbConnection conn = new OleDbConnection(connString))
      {
        PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.Open);
        object val = cmd.ExecuteScalar();
        cmd.Parameters.Clear();
        return val;
      }
    }
    /// <summary>
    ///  Executes the query and returns the first in the result set returned by the query 1 The first of the line 1 Column. Ignore other columns or rows .
    /// </summary>
    /// <param name="conn"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static object ExecuteScalar(OleDbConnection conn, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.AutoDetection);
      object val = cmd.ExecuteScalar();
      cmd.Parameters.Clear();
      return val;
    }
    /// <summary>
    ///  Execute the query and return the result dataset returned by the query .
    /// </summary>
    /// <param name="connString"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static DataSet ExecuteDataset(string connString, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      using (OleDbConnection conn = new OleDbConnection(connString))
      {
        PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.Open);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        cmd.Parameters.Clear();
        return ds;
      }
    }
    /// <summary>
    ///  Execute the query and return the result dataset returned by the query .
    /// </summary>
    /// <param name="conn"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public static DataSet ExecuteDataset(OleDbConnection conn, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
    {
      OleDbCommand cmd = new OleDbCommand();
      PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms, ConnectionActionType.AutoDetection);
      OleDbDataAdapter da = new OleDbDataAdapter(cmd);
      DataSet ds = new DataSet();
      da.Fill(ds);
      cmd.Parameters.Clear();
      return ds;
    }
    /// <summary>
    ///  Cache query's  OleDb  Parameter object .
    /// </summary>
    /// <param name="cacheKey"></param>
    /// <param name="cmdParms"></param>
    public static void CacheParameters(string cacheKey, params OleDbParameter[] cmdParms)
    {
      parmCache[cacheKey] = cmdParms;
    }
    /// <summary>
    ///  Gets the specified array of parameter objects from the cache .
    /// </summary>
    /// <param name="cacheKey"></param>
    /// <returns></returns>
    public static OleDbParameter[] GetCachedParameters(string cacheKey)
    {
      OleDbParameter[] cachedParms = (OleDbParameter[])parmCache[cacheKey];
      if (cachedParms == null)
        return null;
      OleDbParameter[] clonedParms = new OleDbParameter[cachedParms.Length];
      for (int i = 0, j = cachedParms.Length; i < j; i++)
        clonedParms[i] = (OleDbParameter)((ICloneable)cachedParms[i]).Clone();
      return clonedParms;
    }
    /// <summary>
    ///  Prepare command object .
    /// </summary>
    /// <param name="cmd"></param>
    /// <param name="conn"></param>
    /// <param name="trans"></param>
    /// <param name="cmdType"></param>
    /// <param name="cmdText"></param>
    /// <param name="cmdParms"></param>
    /// <param name="connActionType"></param>
    private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, CommandType cmdType, string cmdText, OleDbParameter[] cmdParms, ConnectionActionType connActionType)
    {
      if (connActionType == ConnectionActionType.Open)
      {
        conn.Open();
      }
      else
      {
        if (conn.State != ConnectionState.Open)
          conn.Open();
      }
      cmd.Connection = conn;
      cmd.CommandText = cmdText;
      if (trans != null)
        cmd.Transaction = trans;
      cmd.CommandType = cmdType;
      if (cmdParms != null)
      {
        foreach (OleDbParameter parm in cmdParms)
          cmd.Parameters.Add(parm);
      }
    }
    /// <summary>
    ///  Unified 1 Display data records in pages 
    /// </summary>
    /// <param name="connString"> Database connection string </param>
    /// <param name="pageIndex"> Current page number </param>
    /// <param name="pageSize"> Number of bars displayed per page </param>
    /// <param name="fileds"> Fields displayed </param>
    /// <param name="table"> Inquiry form </param>
    /// <param name="where"> Criteria for Query </param>
    /// <param name="order"> Rules for sorting </param>
    /// <param name="pageCount">out : Total pages </param>
    /// <param name="recordCount">out Total number of articles </param>
    /// <param name="id"> Primary key of table </param>
    /// <returns> Return DataTable Set </returns>
    public static DataTable ExecutePager(string connString, int pageIndex, int pageSize, string fileds, string table, string where, string order, out int pageCount, out int recordCount, string id)
    {
      if (pageIndex < 1) pageIndex = 1;
      if (pageSize < 1) pageSize = 10;
      if (string.IsNullOrEmpty(fileds)) fileds = "*";
      if (string.IsNullOrEmpty(order)) order = "ID desc";
      using (OleDbConnection conn = new OleDbConnection(connString))
      {
        string myVw = string.Format(" {0} ", table);
        string sqlText = string.Format(" select count(0) as recordCount from {0} {1}", myVw, where);
        OleDbCommand cmdCount = new OleDbCommand(sqlText, conn);
        if (conn.State == ConnectionState.Closed)
          conn.Open();
        recordCount = Convert.ToInt32(cmdCount.ExecuteScalar());
        if ((recordCount % pageSize) > 0)
          pageCount = recordCount / pageSize + 1;
        else
          pageCount = recordCount / pageSize;
        OleDbCommand cmdRecord;
        if (pageIndex == 1)// No. 1 1 Page 
        {
          cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, fileds, myVw, where, order), conn);
        }
        else if (pageIndex > pageCount)// Total Pages Exceeded 
        {
          cmdRecord = new OleDbCommand(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageSize, fileds, myVw, "where 1=2", order), conn);
        }
        else
        {
          int pageLowerBound = pageSize * pageIndex;
          int pageUpperBound = pageLowerBound - pageSize;
          string recordIDs = RecordID(string.Format("select top {0} {1} from {2} {3} order by {4} ", pageLowerBound, id, myVw, where, order), pageUpperBound, conn);
          cmdRecord = new OleDbCommand(string.Format("select {0} from {1} where {4} in ({2}) order by {3} ", fileds, myVw, recordIDs, order, id), conn);
        }
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmdRecord);
        DataTable dt = new DataTable();
        dataAdapter.Fill(dt);
        return dt;
      }
    }
    private static string RecordID(string query, int passCount, OleDbConnection conn)
    {
      OleDbCommand cmd = new OleDbCommand(query, conn);
      string result = string.Empty;
      using (IDataReader dr = cmd.ExecuteReader())
      {
        while (dr.Read())
        {
          if (passCount < 1)
          {
            result += "," + dr.GetInt32(0);
          }
          passCount--;
        }
      }
      return result.Substring(1);
    }
    /// <summary>
    ///  Enumeration of join operation types .
    /// </summary>
    enum ConnectionActionType
    {
      None = 0,
      AutoDetection = 1,
      Open = 2
    }
  }
}

For more readers interested in C # related content, please check the topics on this site: "Summary of Thread Use Skills in C # Programming", "Summary of C # Operating Excel Skills", "Summary of XML File Operation Skills in C #", "C # Common Control Usage Tutorial", "WinForm Control Usage Tutorial", "C # Data Structure and Algorithm Tutorial", "C # Array Operation Skills Summary" and "C # Object-Oriented Programming Introduction Tutorial"

I hope this article is helpful to everyone's C # programming.


Related articles: