gpt4 book ai didi

c# - 随机获取 ExecuteNonQuery 需要一个开放且可用的连接

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:26 25 4
gpt4 key购买 nike

我有一个运行一些 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();
}

此代码在每 15 秒运行一次的 Timer 的事件处理程序中执行。如果有任何不同,计时器将由 GC.KeepAlive() 保持事件状态。

最佳答案

为每个定时器回调创建一个新的连接对象:

private void MyTimerEventHandler(object src, ElapsedEventArgs a)
{
SqlConnection sqlCon = new SqlConnection( [...]

重用连接通常不是一个好主意。在您的情况下,如果该连接正在另一个线程中使用,您可能会遇到竞争条件。创建新连接不应影响性能,因为它们是从连接池中提取的。

关于c# - 随机获取 ExecuteNonQuery 需要一个开放且可用的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com