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