Parallel.Foreach SQL-запросов иногда приводит к подключению

Мне нужно ускорить выполнение 12 запросов в моем приложении. Я переключился с обычного foreach на Parallel.ForEach. Но иногда я получаю сообщение об ошибке "ExecuteReader требует открытого и доступного соединениятекущее состояние соединяется. " Насколько я понимаю, так как многие из 12 запросов используют один и тот же InitialCatalog, в действительности нет нового соединения для 12, и в этом может быть проблема? Как я могу это исправить? "SQL» это список типа "Sql»- класс - это просто строковое имя, строковое соединение и список запросов. Вот код:

 /// 
    /// Connects to SQL, performs all queries and stores results in a list of DataTables
    /// 
    /// List of data tables for each query in the config file
    public List GetAllData()
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        List data = new List();

         List sql=new List();

        Sql one = new Sql();
         one.connection = "Data Source=XXX-SQL1;Initial Catalog=XXXDB;Integrated Security=True";
         one.name = "Col1";
         one.queries.Add("SELECT Name FROM [Reports]");
         one.queries.Add("SELECT Other FROM [Reports2]");
         sql.Add(one);

        Sql two = new Sql();
         two.connection = "Data Source=XXX-SQL1;Initial Catalog=XXXDB;Integrated Security=True";
         two.name = "Col2";
         two.queries.Add("SELECT AlternateName FROM [Reports1]");
         sql.Add(two);

         Sql three = new Sql();
         three.connection = "Data Source=YYY-SQL2;Initial Catalog=YYYDB;Integrated Security=True";
         three.name = "Col3";
         three.queries.Add("SELECT Frequency FROM Times");
         sql.Add(three);


        try
        {
            // ParallelOptions options = new ParallelOptions();
            //options.MaxDegreeOfParallelism = 3;
            // Parallel.ForEach(sql, options, s =>
            Parallel.ForEach(sql, s =>
            //foreach (Sql s in sql)
            {
                foreach (string q in s.queries)
                {
                    using (connection = new SqlConnection(s.connection))
                    {
                        connection.Open();
                        DataTable dt = new DataTable();
                        dt.TableName = s.name;
                        command = new SqlCommand(q, connection);
                        SqlDataAdapter adapter = new SqlDataAdapter();
                        adapter.SelectCommand = command;
                        adapter.Fill(dt);
                        //adapter.Dispose();

                        lock (data)
                        {
                            data.Add(dt);
                        }
                    }
                }
            }
            );
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "GetAllData error");
        }

        sw.Stop();
        MessageBox.Show(sw.Elapsed.ToString());

        return data;
    }

Вот'Sql класс, который я сделал, что тымне нужно:

/// 
/// Class defines a SQL connection and its respective queries
/// 
public class Sql
{
    /// 
    /// Name of the connection/query
    /// 
    public string name { get; set; }
    /// 
    /// SQL Connection string
    /// 
    public string connection { get; set; }
    /// 
    /// List of SQL queries for a connection
    /// 
    public List queries = new List();
}

Ответы на вопрос(3)

Ваш ответ на вопрос