Ошибка: «Невозможно установить командный текст при активном носителе данных» с ExecuteNonQuery ()

Я прослушиваю поток данных и сохраняю данные в виде операторов вставки в ConcurrentQueue и вставляю данные с помощью массовой вставки, используя System.Threading.Timer с интервал 1000. Весь сценарий выполняется в статическом классе. Вот код:

static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    if (queryQueue.IsEmpty)
        return;
    string text = "";
//bulkBuilder is StringBuilder.
//queryQueue is ConcurrentQueue
    bulkBuilder.AppendLine("PRAGMA synchronous = 0;PRAGMA count_changes = FALSE;PRAGMA journal_mode=OFF;Begin;");
    while (queryQueue.TryDequeue(out text))
    {
        bulkBuilder.Append(text);
        bulkBuilder.AppendLine(";");
    }
    bulkBuilder.AppendLine("Commit;");

    try
    {
        sqlCommand.CommandText = bulkBuilder.ToString();
        sqlCommand.ExecuteNonQuery();
    }
    catch (System.Exception ex)
    {
        Console.WriteLine("Error while inserting Data : " + ex.Message);
    }
    finally
    {
        bulkBuilder.Clear();
    }

}

Забавно то, что sqlCommand используется только для вставки, только для ExecuteNonQuery () в этом таймере. И время от времени появляется сообщение об ошибке: «Невозможно установить командный текст, пока активен считыватель данных». Это чушь, поскольку этот код не имеет ничего общего с внутренним SQLiteDataReader в sqlCommand .

Как мне избавиться от этой ошибки?

6
задан ali_bahoo 29 September 2011 в 09:10
поделиться