いくつかのExecuteNonQuery
コマンドを実行するループがあります。時折、次のエラー メッセージが返されます。
ExecuteNonQuery requires an open and available connection. The connections
current state is closed.
これが私のコードです:
private void MyTimerEventHandler(object src, ElapsedEventArgs a)
{
sqlCon = new SqlConnection("server=" + appConfig.sqlServer + ";Trusted_Connection=yes;database=testdb;connection timeout=30;");
sqlCon.Open();
foreach (TagManager tm in tagManagerList)
{
foreach (Tag tag in tm.getTags())
{
SqlCommand insCmd = new SqlCommand("INSERT INTO tag_values (tag_id, value, time) Values (@tagId, @tagValue, @tagTime);", sqlCon);
insCmd.Parameters.Add(new SqlParameter("@tagId", tag.tagNameId));
insCmd.Parameters.Add(new SqlParameter("@tagValue", tag.value));
insCmd.Parameters.Add(new SqlParameter("@tagTime", tag.time));
insCmd.ExecuteNonQuery();
}
}
sqlCon.Close();
}
Timer
このコードは、 15 秒ごとに実行される のイベント ハンドラで実行されます。GC.KeepAlive()
それが違いを生む場合、タイマーは生き続けます。