BB猫!
返回

OleDbHelper

2022-12-06 817 0

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace OleDbHelper
{
    public sealed class OleDbHelper
    {
        static string cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\records.mdb";
        //const string="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\records.mdb;Jet OLEDB:Database Password=eowc";
        private OleDbHelper() { }
        private static void AttachParameters(OleDbCommand command, OleDbParameter[] commandParameters)
        {
            foreach (OleDbParameter p in commandParameters)
            {
                if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
                {
                    p.Value = DBNull.Value;
                }
                command.Parameters.Add(p);
            }
        }
        private static void AssignParameterValues(OleDbParameter[] commandParameters, object[] parameterValues)
        {
            if ((commandParameters == null) || (parameterValues == null))
            {
                return;
            }
            if (commandParameters.Length != parameterValues.Length)
            {
                throw new ArgumentException("Parameter count does not match Parameter Value count.");
            }
            for (int i = 0, j = commandParameters.Length; i < j; i++)
            {
                commandParameters[i].Value = parameterValues[i];
            }
        }
        private static void PrepareCommand(OleDbCommand command, OleDbConnection connection, OleDbTransaction transaction, CommandType commandType, string commandText, OleDbParameter[] commandParameters)
        {
            if (connection.State != ConnectionState.Open)
            {
                connection.Open();
            }
            command.Connection = connection;
            command.CommandText = commandText;
            if (transaction != null)
            {
                command.Transaction = transaction;
            }
            command.CommandType = commandType;
            if (commandParameters != null)
            {
                AttachParameters(command, commandParameters);
            }
            return;
        }
        public static int ExecuteNonQuery(string sql)
        {
            return ExecuteNonQuery(sql, (OleDbParameter[])null);
        }
        public static int ExecuteNonQuery(string sql, params OleDbParameter[] commandParameters)
        {
            using (OleDbConnection cn = new OleDbConnection(cnstr))
            {
                cn.Open();
                return ExecuteNonQuery(cn, CommandType.Text, sql, commandParameters);
            }
        }
        private static int ExecuteNonQuery(OleDbConnection connection, CommandType commandType, string commandText, params OleDbParameter[] commandParameters)
        {
            OleDbCommand cmd = new OleDbCommand();
            PrepareCommand(cmd, connection, (OleDbTransaction)null, commandType, commandText, commandParameters);
            return cmd.ExecuteNonQuery();
        }
        public static int ExecuteProcedure(string Proc, params object[] parameterValues)
        {
            if ((parameterValues != null) && (parameterValues.Length > 0))
            {
                OleDbParameter[] commandParameters = OleDbHelperParameterCache.GetSpParameterSet(cnstr, Proc);
                AssignParameterValues(commandParameters, parameterValues);
                using (OleDbConnection cn = new OleDbConnection(cnstr))
                {
                    cn.Open();
                    return ExecuteNonQuery(cn, CommandType.StoredProcedure, Proc, commandParameters);
                }
            }
            else
            {
                using (OleDbConnection cn = new OleDbConnection(cnstr))
                {
                    cn.Open();
                    return ExecuteNonQuery(cn, CommandType.StoredProcedure, Proc);
                }
            }
        }
        public static object ExecuteScalar(string sql)
        {
            return ExecuteScalar(sql, (OleDbParameter[])null);
        }
        public static object ExecuteScalar(string sql, params OleDbParameter[] commandParameters)
        {
            using (OleDbConnection cn = new OleDbConnection(cnstr))
            {
                cn.Open();
                return ExecuteScalar(cn, CommandType.Text, sql, commandParameters);
            }
        }
        private static object ExecuteScalar(OleDbConnection connection, CommandType commandType, string commandText, params OleDbParameter[] commandParameters)
        {
            OleDbCommand cmd = new OleDbCommand();
            PrepareCommand(cmd, connection, (OleDbTransaction)null, commandType, commandText, commandParameters);
            return cmd.ExecuteScalar();
        }
        public static DataTable FillDataTable(string sql, params OleDbParameter[] cmdParms)
        {
            OleDbCommand cmd = new OleDbCommand();
            using (OleDbConnection conn = new OleDbConnection(cnstr))
            {
                DataTable dt = new DataTable();
                PrepareCommand(cmd, conn, (OleDbTransaction)null, CommandType.Text, sql, cmdParms);
                OleDbDataAdapter sda = new OleDbDataAdapter(cmd);
                sda.Fill(dt);
                cmd.Parameters.Clear();
                sda.Dispose();
                return dt;
            }
        }
        public static void ExecuteSqlList(List<string> SQLStringList)
        {
            using (OleDbConnection conn = new OleDbConnection(constr))
            {
                conn.Open();
                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = conn;
                OleDbTransaction tx = conn.BeginTransaction();
                cmd.Transaction = tx;
                try
                {
                    for (int n = 0; n < SQLStringList.Count; n++)
                    {
                        string strSQL = SQLStringList[n].ToString();
                        if (strSQL.Trim().Length > 1)
                        {
                            cmd.CommandText = strSQL;
                            cmd.ExecuteNonQuery();
                        }
                    }
                    tx.Commit();
                }
                catch (Exception E)
                {
                    tx.Rollback();
                    throw new Exception(E.Message);
                }
            }
        }
    }
    public sealed class OleDbHelperParameterCache
    {
        private OleDbHelperParameterCache() { }
        private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
        private static OleDbParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
        {
            using (OleDbConnection cn = new OleDbConnection(connectionString))
            using (OleDbCommand cmd = new OleDbCommand(spName, cn))
            {
                cn.Open();
                cmd.CommandType = CommandType.StoredProcedure;
                OleDbCommandBuilder.DeriveParameters(cmd);
                if (!includeReturnValueParameter)
                {
                    if (ParameterDirection.ReturnValue == cmd.Parameters[0].Direction)
                        cmd.Parameters.RemoveAt(0);
                }
                OleDbParameter[] discoveredParameters = new OleDbParameter[cmd.Parameters.Count];
                cmd.Parameters.CopyTo(discoveredParameters, 0);
                return discoveredParameters;
            }
        }
        private static OleDbParameter[] CloneParameters(OleDbParameter[] originalParameters)
        {
            OleDbParameter[] clonedParameters = new OleDbParameter[originalParameters.Length];
            for (int i = 0, j = originalParameters.Length; i < j; i++)
            {
                clonedParameters[i] = (OleDbParameter)((ICloneable)originalParameters[i]).Clone();
            }
            return clonedParameters;
        }
        public static void CacheParameterSet(string connectionString, string commandText, params OleDbParameter[] commandParameters)
        {
            string hashKey = connectionString + ":" + commandText;
            paramCache[hashKey] = commandParameters;
        }
        public static OleDbParameter[] GetCachedParameterSet(string connectionString, string commandText)
        {
            string hashKey = connectionString + ":" + commandText;
            OleDbParameter[] cachedParameters = (OleDbParameter[])paramCache[hashKey];
            if (cachedParameters == null)
            {
                return null;
            }
            else
            {
                return CloneParameters(cachedParameters);
            }
        }
        public static OleDbParameter[] GetSpParameterSet(string connectionString, string spName)
        {
            return GetSpParameterSet(connectionString, spName, true);
        }
        public static OleDbParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
        {
            string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
            OleDbParameter[] cachedParameters;
            cachedParameters = (OleDbParameter[])paramCache[hashKey];
            if (cachedParameters == null)
            {
                cachedParameters = (OleDbParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));
            }
            return CloneParameters(cachedParameters);
        }
    }
}


点赞 收藏

顶部