C#的Access数据库操作 AccessHelper类

由于学校的安全级别提高了,我们以前做的网站使用拼接sql方法查询数据会被拦截,所以说网站就必须重构,在重构之余,复习了下AccessHelper类,随便复习了下C#数据库操作。下面我们就开始吧。

先说个工具类,就是池类Pool,很简单的一个类,直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.OleDb;

namespace BusinessAdminAcademy.Utility
{
    /// <summary>

    /// 连接对象。

    /// </summary>

    public class Pool
    {

        /// <summary>

        /// 初始化。

        /// </summary>

        /// <param name="id">代码。</param>

        /// <param name="connection">数据库连接对象。</param>

        /// <param name="isUse">使用标志。</param>

        /// <param name="openTime">打开时间。</param>

        public Pool(Guid id, OleDbConnection connection, bool isUse, DateTime openTime)
        {

            this.id = id;

            IsUse = isUse;

            this.connection = connection;

            OpenTime = openTime;

        }

        private Guid id;

        /// <summary>

        /// 获取连接对象的代码。

        /// </summary>

        public Guid Id { get { return id; } }

        private OleDbConnection connection;

        /// <summary>

        /// 获取数据库连接对象。

        /// </summary>

        public OleDbConnection Connection { get { return connection; } }

        /// <summary>

        /// 获取或设置一个值,该值指示连接对象是否已经使用,true-已经使用,否则没有使用。

        /// </summary>

        public bool IsUse { get; set; }

        /// <summary>

        /// 获取或设置连接对象打开数据库的时间。

        /// </summary>

        public DateTime OpenTime { get; set; }

    }
}

然后就是AccessHelper类

最开始当然是找到数据库连接字符串

 public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["ConnStringAccess"].ConnectionString;

然后写一个静态的获取连接的方法

 public static OleDbConnection getConnection()
        {
            OleDbConnection conn = new OleDbConnection(ConnectionString);
            return conn;
        }

先来第一个方法,用于简单地执行一段SQL语句,返回影响行数

        /// <summary>
        /// 用于简单地执行一段SQL语句
        /// </summary>
        /// <param name="conn">OleDbConnection</param>
        /// <param name="cmdText">command的字符串sql</param>
        /// <returns>返回影响行数</returns>
        public static int ExecuteNonQuerySimple(OleDbConnection conn, string cmdText)
        {
            OleDbCommand cmd = new OleDbCommand();

            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            int val = cmd.ExecuteNonQuery();

            return val;
        }

刚刚那个是执行一条简单的sql,那么有参数列表的话就用下面的方法,加了一个参数列表函数。

        /// <summary>
        /// 用于执行一段SQL语句,只有三个最简的必要参数,省去了commandtype。
        /// </summary>
        /// <param name="connString">连接字符串 (Conntection String)</param>
        /// <param name="cmdText">command的字符串 (SQL Statement)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>返回影响行数 (effect line number)</returns>
        public static int ExecuteNonQuery(OleDbConnection conn, string cmdText, params OleDbParameter[] cmdParms)
        {
            OleDbCommand cmd = new OleDbCommand();

            PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, cmdParms);

            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;

        }

看到刚刚的方法,你或许会问PrepareCommand是什么用的,对的,你没有猜错,正如它的名字一样,准备Command用的

        /// <summary>
        /// 在执行SQL语句之前的准备工作
        /// </summary>
        /// <param name="cmd">command</param>
        /// <param name="conn">connection</param>
        /// <param name="trans">trasaction</param>
        /// <param name="cmdType">command类型</param>
        /// <param name="cmdText">command字符串</param>
        /// <param name="cmdParms">参数列表</param>
        private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, CommandType cmdType, string cmdText, OleDbParameter[] cmdParms)
        {

            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);
            }
        }

下面的这个方法和刚刚那个差不多,多了一个CommandType,上面那个是使用默认的

        /// <summary>
        /// 用于执行一段SQL语句。传入的值是connection.
        /// To excute a SQL statement, which reuturns a integer stand for effect line number.
        /// a connection is passed in instead of a connection string
        /// </summary>
        /// <param name="conn">一个以初始化好的OleDbConnection (a Conncection)</param>
        /// <param name="CommandType">CommandType</param>
        /// <param name="cmdText">command的字符串 (SQL Statement)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>返回影响行数 (effect line number)</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);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

下面这个方法是与事务有关的

        /// <summary>
        /// 用于执行一段SQL语句。需要传入一个事物Transaction.
        /// To excute a SQL statement, which reuturns a integer stand for effect line number.
        /// a transaction is reqired
        /// </summary>
        /// <param name="trans">一个Trasaction (Trasaction)</param>
        /// <param name="cmdType">command的字符串 (SQL Statement)</param>
        /// <param name="cmdText">command的类型,具体见:CommandType (Command type)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>返回影响行数 (effect line number)</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);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

下面三个方法是查询数据用的

        /// <summary>
        /// 用于执行一个Select语句返回一个datareader,省略了commandtype参数
        /// To excute a SQL statement, and reuturns a dataReader.
        /// default command type is text
        /// </summary>
        /// <param name="connString">连接字符串 (Conntection String)</param>
        /// <param name="cmdText">command的字符串 (SQL Statement)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>datareader</returns>
        public static OleDbDataReader ExecuteReader(Pool pool,OleDbConnection conn, string cmdText, params OleDbParameter[] cmdParms)
        {
            OleDbCommand cmd = new OleDbCommand();

            // we use a try/catch here because if the method throws an exception we want to
            // close the connection throw code, because no datareader will exist, hence the
            // commandBehaviour.CloseConnection will not work
            try
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, cmdParms);
                OleDbDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                //              cmd.Parameters.Clear();
                return rdr;
            }
            catch
            {
                ConnectionPool.Close(pool);
                throw;
            }
        }

        /// <summary>
        /// 用于执行一个Select语句返回一个datareader
        /// To excute a SQL statement, and reuturns a dataReader.
        /// </summary>
        /// <param name="connString">连接字符串 (Connection String)</param>
        /// <param name="cmdType">command的字符串 (SQL Statement)</param>
        /// <param name="cmdText">command的类型,具体见:CommandType (Command type)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>dataReader</returns>
        public static OleDbDataReader ExecuteReader(Pool pool, OleDbConnection conn, CommandType cmdType, string cmdText, params OleDbParameter[] cmdParms)
        {
            OleDbCommand cmd = new OleDbCommand();

            // we use a try/catch here because if the method throws an exception we want to
            // close the connection throw code, because no datareader will exist, hence the
            // commandBehaviour.CloseConnection will not work
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                OleDbDataReader rdr = cmd.ExecuteReader();
                //              cmd.Parameters.Clear();
                return rdr;
            }
            catch
            {
                ConnectionPool.Close(pool);
                throw;
            }
        }

        /// <summary>
        /// 用于读取一个值,查询所返回的是结果集中第一行的第一列,省去了commandtype
        /// To excute a SQL statement, and returns the first column of the first line
        /// Default command type is text
        /// </summary>
        /// <param name="connString">连接字符串 (Conntection String)</param>
        /// <param name="cmdText">command的字符串 (SQL Statement)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>the first column of the first line</returns>
        public static object ExecuteScalar(OleDbConnection conn, string cmdText, params OleDbParameter[] cmdParms)
        {
            OleDbCommand cmd = new OleDbCommand();

            PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, cmdParms);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;
        }

        /// <summary>
        /// 用于读取一个值,查询所返回的是结果集中第一行的第一列
        /// To excute a SQL statement, and returns the first column of the first line
        /// </summary>
        /// <param name="connString">连接字符串 (Connection String)</param>
        /// <param name="cmdType">command的字符串 (SQL Statement)</param>
        /// <param name="cmdText">command的类型,具体见:CommandType (Command type)</param>
        /// <param name="cmdParms">参数列表 (Paramters)</param>
        /// <returns>the first column of the first line</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);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;

        }

AccessHelper类的一些基本方法就这样了,很基础。对OleDbConnection、OleDbCommand等一些数据库操作类有一定基础的学习者来说,很简单。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-16 08:32:32

C#的Access数据库操作 AccessHelper类的相关文章

C# ACCESS数据库操作类

这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下! using System; using System.Text; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Data.OleDb; using System

Microsoft Access数据库操作类(C#)

博文介绍的Microsoft Access数据库操作类是C#语言的,可实现对Microsoft Access数据库的增删改查询等操作.并且该操作类可实现对图片的存储,博文的最后附上如何将Image图片转换为byte[]数组类型,以及如何将byte[]数组类型转换为Image图片. 博文中会贴出该类的下载地址,可以直接下载使用. 注:操作Microsoft Access数据库需要安装Microsoft Office Access DataBase Engine,可以直接去微软的官网下载. 1. A

数据库操作通用类

DataBase.java 说明: 1. 此类包含对数据库的查询,删除,更新操作.     2. 可以实现对大文本对象的增删改.     3. 利用自建的数据库连接池类, 得到数据库连接.     4. 可以利用Tomcat 自带的连接池, 得到数据库连接 变量:     1. 数据库连接 变量名     : conn 应用范围   : protect 变量类型   : Connection 数据库连接 初始值     : null 是否Static :  否     2. 声明语句 变量名  

sqlserver数据库操作公共类DBOperate

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; using System.Windows.Forms; using  WindowsFormsApplication1.DBTools;//提供数据库连接 namespace liuxw_MPS.DBTools {     ///

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </sum

C#---数据库访问通用类、Access数据库操作类、mysql类 .

//C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </summary&

PHP数据库操作&amp;分页类

MySQL数据库操作类: 1 <?php 2 class mysql { 3 private $db_host; //数据库主机 4 private $db_user; //数据库用户名 5 private $db_pwd; //数据库用户名密码 6 private $db_database; //数据库名 7 private $conn; //数据库连接标识; 8 private $result; //执行query命令的结果资源标识 9 private $sql; //sql执行语句 10

多类型数据库公共操作-对应数据库操作实例类

using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Data.Common; using Microsoft.Practices.EnterpriseLibrary.Data;using EFWCoreLib.CoreFrame.EntLib; namespace EFWCoreLib.CoreFrame.DbProvider{ /// <

OSChina底层数据库操作的类(QueryHelper)源码

OSChina 使用的是 dbutils 这个JDBC的封装类库来进行数据库操作.而 QueryHelper 则是在 dbutils 的基础上进行一级简单的封装,提供一些常用的数据库操作方法和对数据缓存的支持. 数据库连接的释放方法请看这里. 标签: OSCHINA JDBC 数据库 DbUtils [1].[代码] QueryHelper.java 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2