namespace DataAccess
{ public sealed class OleDbHelper
{
#region private utility methods & constructors
        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;
}
#endregion private utility methods & constructors #region ExecuteNonQuery
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
{

return ExecuteNonQuery(connectionString, commandType, commandText, (OleDbParameter[])null);
}
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params OleDbParameter[] commandParameters)
{

using (OleDbConnection cn = new OleDbConnection(connectionString))
{
cn.Open();
return ExecuteNonQuery(cn, commandType, commandText, commandParameters);
}
}
public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
{

if ((parameterValues != null) && (parameterValues.Length > 0)) 
{ OleDbParameter[] commandParameters = OleDbHelperParameterCache.GetSpParameterSet(connectionString, spName);
AssignParameterValues(commandParameters, parameterValues);
return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
} else 
{
return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
}
}
public static int ExecuteNonQuery(OleDbConnection connection, CommandType commandType, string commandText)
{

return ExecuteNonQuery(connection, commandType, commandText, (OleDbParameter[])null);
}
public static int ExecuteNonQuery(OleDbConnection connection, CommandType commandType, string commandText, params OleDbParameter[] commandParameters)
{

OleDbCommand cmd = new OleDbCommand();
PrepareCommand(cmd, connection, (OleDbTransaction)null, commandType, commandText, commandParameters);


int retval = cmd.ExecuteNonQuery();


cmd.Parameters.Clear();
return retval;
} public static int ExecuteNonQuery(OleDbConnection connection, string spName, params object[] parameterValues)
{

if ((parameterValues != null) && (parameterValues.Length > 0)) 
{

OleDbParameter[] commandParameters = OleDbHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);
AssignParameterValues(commandParameters, parameterValues);
return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
} else 
{
return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
}
}
public static int ExecuteNonQuery(OleDbTransaction transaction, CommandType commandType, string commandText)
{

return ExecuteNonQuery(transaction, commandType, commandText, (OleDbParameter[])null);
}
public static int ExecuteNonQuery(OleDbTransaction transaction, CommandType commandType, string commandText, params OleDbParameter[] commandParameters)
{

OleDbCommand cmd = new OleDbCommand();
PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);
int retval = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return retval;
}
public static int ExecuteNonQuery(OleDbTransaction transaction, string spName, params object[] parameterValues)
{ if ((parameterValues != null) && (parameterValues.Length > 0)) 
{

OleDbParameter[] commandParameters = OleDbHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);
AssignParameterValues(commandParameters, parameterValues);
return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
} else 
{
return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
}
}