4
我監聽數據流並將數據作爲插入語句存儲在ConcurrentQueue
中,並使用System.Threading.Timer
以批量插入插入數據,間隔爲1000。整個場景運行在一個靜態類上。 下面是代碼:錯誤:使用ExecuteNonQuery()不能設置commandtext當使用ExecuteNonQuery()
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()
。並且時常發生錯誤,提示「在數據訪問器處於活動狀態時無法設置commandtext」。這是無稽之談,因爲此代碼與sqlCommand
中的內部SQLiteDataReader
無關。
我該如何擺脫這個錯誤?