Consider the following method...
private string[] GetExistingPOWSNumbers()
{
    using (
        var OleAdapter =
            new OleDbDataAdapter(
                "SELECT DISTINCT con_num FROM `Items` WHERE con_num LIKE 'POWS%'",
                ConfigurationManager.ConnectionStrings["MPOleConnectionString"].ConnectionString))
    using (var POWSTable = new DataTable())
    {
        OleAdapter.SelectCommand.Connection.Open();
        OleAdapter.Fill(POWSTable);
        return POWSTable.AsEnumerable().Select(row => Convert.ToString(row["con_num"])).ToArray();
    }
}
Are all the ADO.NET objects promptly being disposed of? I am using this method throughout my projects and when there are A LOT of calls like these being made during a single action, I receive "Out of Memory" errors.
EDIT: After some personal investigation I discovered that, in fact, the using statement for the adapter DOES NOT also close the provided collection. I made the following change. Now I am using a DataReader instead of populating a DataTable.
private string[] GetExistingPOWSNumbers()
{
    var Results = new List<string>();
    using (var OleConnection = new OleDbConnection(ConfigurationManager.ConnectionStrings["MPOleConnectionString"].ConnectionString))
    using (
        var OleCommand =
            new OleDbCommand(
                "SELECT DISTINCT con_num FROM `Items` WHERE con_num LIKE 'POWS%'",
                OleConnection))
    {
        OleConnection.Open();
        using (var OleReader = OleCommand.ExecuteReader(CommandBehavior.CloseConnection))
        {
            if (OleReader == null) return new string[0];
            while (OleReader.Read())
            {
                Results.Add(OleReader.GetString(0));
            }
        }
    }
    return Results.ToArray();
}
 
     
    