C#操作Access通用类实例

本文实例讲述了C#操作Access通用类。分享给大家供大家参考。具体如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Collections;
/// <summary>
/// AcceHelper 的摘要说明
/// </summary>
public static class AccessHelper
{
  //数据库连接字符串
  public static readonly string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Request.PhysicalApplicationPath + System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  // 用于缓存参数的HASH表
  private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
  /// <summary>
  /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
  /// </summary>
  /// <param name="connectionString">一个有效的连接字符串</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>执行命令所影响的行数</returns>
  public static int ExecuteNonQuery(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
      PrepareCommand(cmd, conn, null, cmdText, commandParameters);
      int val = cmd.ExecuteNonQuery();
      cmd.Parameters.Clear();
      return val;
    }
  }
  /// <summary>
  /// 用现有的数据库连接执行一个sql命令(不返回数据集)
  /// </summary>
  /// <remarks>
  ///举例:
  /// int result = ExecuteNonQuery(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="conn">一个现有的数据库连接</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>执行命令所影响的行数</returns>
  public static int ExecuteNonQuery(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    PrepareCommand(cmd, connection, null, cmdText, commandParameters);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
  }
  /// <summary>
  ///使用现有的SQL事务执行一个sql命令(不返回数据集)
  /// </summary>
  /// <remarks>
  ///举例:
  /// int result = ExecuteNonQuery(trans, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="trans">一个现有的事务</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>执行命令所影响的行数</returns>
  public static int ExecuteNonQuery(OleDbTransaction trans, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    PrepareCommand(cmd, trans.Connection, trans, cmdText, commandParameters);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
  }
  /// <summary>
  /// 用执行的数据库连接执行一个返回数据集的sql命令
  /// </summary>
  /// <remarks>
  /// 举例:
  /// OleDbDataReader r = ExecuteReader(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="connectionString">一个有效的连接字符串</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>包含结果的读取器</returns>
  public static OleDbDataReader ExecuteReader(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    //创建一个SqlCommand对象
    OleDbCommand cmd = new OleDbCommand();
    //创建一个SqlConnection对象
    OleDbConnection conn = new OleDbConnection(connectionString);
    //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
    //因此commandBehaviour.CloseConnection 就不会执行
    try
    {
      //调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
      PrepareCommand(cmd, conn, null, cmdText, commandParameters);
      //调用 SqlCommand 的 ExecuteReader 方法
      OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      //清除参数
      cmd.Parameters.Clear();
      return reader;
    }
    catch
    {
      //关闭连接,抛出异常
      conn.Close();
      throw;
    }
  }
  /// <summary>
  /// 返回一个DataSet数据集
  /// </summary>
  /// <param name="connectionString">一个有效的连接字符串</param>
  /// <param name="cmdText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>包含结果的数据集</returns>
  public static DataSet ExecuteDataSet(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    //创建一个SqlCommand对象,并对其进行初始化
    OleDbCommand cmd = new OleDbCommand();
    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
      PrepareCommand(cmd, conn, null, cmdText, commandParameters);
      //创建SqlDataAdapter对象以及DataSet
      OleDbDataAdapter da = new OleDbDataAdapter(cmd);
      DataSet ds = new DataSet();
      try
      {
        //填充ds
        da.Fill(ds);
        // 清除cmd的参数集合
        cmd.Parameters.Clear();
        //返回ds
        return ds;
      }
      catch
      {
        //关闭连接,抛出异常
        conn.Close();
        throw;
      }
    }
  }
  /// <summary>
  /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
  /// </summary>
  /// <remarks>
  ///例如:
  /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  ///<param name="connectionString">一个有效的连接字符串</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
  public static object ExecuteScalar(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
      PrepareCommand(cmd, connection, null, cmdText, commandParameters);
      object val = cmd.ExecuteScalar();
      cmd.Parameters.Clear();
      return val;
    }
  }
  /// <summary>
  /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
  /// </summary>
  /// <remarks>
  /// 例如:
  /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
  /// </remarks>
  /// <param name="conn">一个存在的数据库连接</param>
  /// <param name="commandText">存储过程名称或者sql命令语句</param>
  /// <param name="commandParameters">执行命令所用参数的集合</param>
  /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
  public static object ExecuteScalar(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
  {
    OleDbCommand cmd = new OleDbCommand();
    PrepareCommand(cmd, connection, null, cmdText, commandParameters);
    object val = cmd.ExecuteScalar();
    cmd.Parameters.Clear();
    return val;
  }
  /// <summary>
  /// 将参数集合添加到缓存
  /// </summary>
  /// <param name="cacheKey">添加到缓存的变量</param>
  /// <param name="cmdParms">一个将要添加到缓存的sql参数集合</param>
  public static void CacheParameters(string cacheKey, params OleDbParameter[] commandParameters)
  {
    parmCache[cacheKey] = commandParameters;
  }
  /// <summary>
  /// 找回缓存参数集合
  /// </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 =(OleDbParameter[])((ICloneable)cachedParms).Clone();
    return clonedParms;
  }
  /// <summary>
  /// 准备执行一个命令
  /// </summary>
  /// <param name="cmd">sql命令</param>
  /// <param name="conn">Sql连接</param>
  /// <param name="trans">Sql事务</param>
  /// <param name="cmdText">命令文本,例如:Select * from Products</param>
  /// <param name="cmdParms">执行命令的参数</param>
  private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms)
  {
    //判断连接的状态。如果是关闭状态,则打开
    if (conn.State != ConnectionState.Open)
      conn.Open();
    //cmd属性赋值
    cmd.Connection = conn;
    cmd.CommandText = cmdText;
    //是否需要用到事务处理
    if (trans != null)
      cmd.Transaction = trans;
    cmd.CommandType = CommandType.Text;
    //添加cmd需要的存储过程参数
    if (cmdParms != null)
    {
      foreach (OleDbParameter parm in cmdParms)
        cmd.Parameters.Add(parm);
    }
  }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • c#连接access数据库操作类分享

    1.配置web.config文件:配置数据库连接参数(根据实际情况设置数据库路径和密码) 复制代码 代码如下: <configuration><appSettings/><connectionStrings><add name="ConnectionString" connectionString="PRovider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\keleyi\App_Data\db.m

  • C# Access数据库增删查改的简单方法

    引用集:using System.Data.OleDb; 复制代码 代码如下: static string exePath = System.Environment.CurrentDirectory;//本程序所在路径 //创建连接对象OleDbConnection conn = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;data source=" + exePath + @"\文件名.mdb");

  • C#使用ADO.Net部件来访问Access数据库的方法

    数据库的访问是所有编程语言中最重要的部分,C#提供了ADO.Net部件用于对数据库进行访问.我们将从最简单易用的微软Access数据库入手讨论在C#中对数据库的访问. C#中的Connection对象和Command对象与Access类似,但在这里我们还将使用其另一个与RecordSet类似的被称作ADODataReader的对象,它负责处理与查询有关的RecordSet对象. 首先,必须使用微软的Access创建一个数据库.运行Access,创建一个数据库,但不要创建任何表(我们将在下面的程序

  • C#实现Access通用访问类OleDbHelper完整实例

    本文实例讲述了C#实现Access通用访问类OleDbHelper.分享给大家供大家参考,具体如下: 最近在做一个项目数据库用的是Access,第一次使用Access数据库,刚开始做有些不顺,数据库的操作和SqlServer稍有些不同,而异常跟踪得到的信息也没有什么意义,经过几天的反复寻找问题,总算解决了一些问题,为了访问Access 数据库,我写了一个用于专门访问的类来操作数据库,其中包括,执行数据库命令,返回 DataSet,返回单条记录,返回DataReader,通用分页方法等几个常用的的

  • C#动态创建Access数据库及表的方法

    本文实例讲述了C#动态创建Access数据库及表的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: //添加两个com组件引用 //Microsoft ADO Ext. 2.8 for DDL and Security //Microsoft ActiveX Data Objects 2.8 Library using System; using System.Collections.Generic; using System.Linq; using System.Text

  • C#编程实现连接ACCESS数据库实例详解

    本文实例讲述了C#编程实现连接ACCESS数据库的方法.分享给大家供大家参考,具体如下: 一.建立FORM窗体,加一个按钮控件,加一个DATAGRIDVIEW控件. 二.双击FORM,加入命名空间 复制代码 代码如下: using System.Data.OleDb; 双击按钮,进入按钮代码,写如下代码 OleDbConnection strConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source

  • ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数第1/2页

    最近因项目需要用ACCESS做数据库开发WEB项目 看论坛上还许多人问及ACCESS被注入的安全问题 许多人解决的方法仍然是用Replace替换特殊字符,然而这样做也并没有起到太大做用 今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享 希望对大家有所启发,有写的不对的地方希望高手们多多指教 ASP.NET 用OleDbCommand的new OleDbParameter创建参数货查询 ASP用Command的CreateParameter 方法创建参数化查询 (SQL储存过程查询也

  • C#数据库操作类AccessHelper实例

    本文实例讲述了C#数据库操作类AccessHelper.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Data.OleDb; using ahwildlife.Utils; /// <summary> /// AccessHelper 的摘要说明 /// </summary> public class AccessH

  • C#通过oledb访问access数据库的方法

    本文实例讲述了C#通过oledb访问access数据库的方法.分享给大家供大家参考.具体分析如下: 这里演示了如何在 C# 中使用 Microsoft Access 数据库.包括如何创建数据集并从数据库向该数据集添加表. // OleDbSample.cs // 若要从命令行生成此示例,请使用命令: // csc oledbsample.cs using System; using System.Data; using System.Data.OleDb; using System.Xml.Se

  • ASP.net(c#)用类的思想实现插入数据到ACCESS例子

    昨天写了一半,一直没弄清楚当ACCESS数据库的连接代码写成类的时候路径该怎么写,搞了半天,还是用绝对路径解决了,似乎Server.MapPath没法在cs文件中使用. 要实现的功能如下: 尽量用类的思想来完成数据的插入,因为这个例子简单,所以我也就不多说什么.大家自己看代码,不懂的可以到论坛交流. 1.首先是ACCESS数据库的设计,数据库名:myData,表名:student 字段名称                    数据类型 sid                          

  • asp.net(C#) Access 数据操作类

    复制代码 代码如下: using System; using System.Configuration; using System.Data; using System.Data.OleDb; using System.Xml; using System.Collections; namespace Website.Command { /// <summary> /// WSplus 的摘要说明. /// </summary> public class AccessClass :

  • C#对Access进行增删改查的完整示例

    这篇文章整理了C#对Access数据库的查询.添加记录.删除记录和更新数据等一系列的操作示例,有需要的可以参考学习. 首先是AccessHelper.cs,网上有下载,下面附送一份: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.OleDb; using System.Data

随机推荐