InvalidOperationException with service_timer

本文关键字:timer service with InvalidOperationException | 更新日期: 2023-09-27 18:36:33

我正在用C#开发一个Windows服务,当文件放入特定目录时,它会多次访问数据库。 此外,我有一个每 5 分钟运行一次的service_timer,它也访问数据库。 那么问题来了,当我的服务正在处理一个文件并且我的service_timer被调用时,我最终会得到一个无效操作错误(已经有一个打开的数据读取器)。

有没有办法为数据库创建一个新的连接(在Microsoft SQL Server Express上),这样我就可以避免这个问题,或者有其他常见的解决方案?

谢谢。

下面是引发异常的函数的代码:

            DateTime start = DateTime.Now;
            string SqlQuery = "SELECT COUNT (*) AS recCount FROM " + tableName + " " + whereclause;
            Debug.WriteLine(thisMethod + " SqlQuery: " + SqlQuery);
            myCommand = new SqlCommand(SqlQuery, this.SDB); //Execute Sql Statement
            myCommand.ExecuteNonQuery();
            // Create New Adapter
            adapter = new SqlDataAdapter(myCommand);

            adapter.SelectCommand = myCommand;
            DataSet ds = new DataSet();
            // Populate Adapter
            adapter.Fill(ds);
            foreach (DataTable dt in ds.Tables)
                foreach (DataRow dr in dt.Rows)
                {
                    recCount = Convert.ToInt32(dr["recCount"]);
                }

InvalidOperationException with service_timer

问题就在这里

myCommand = new SqlCommand(SqlQuery, this.SDB);

应在方法中创建新的 SQLConnection,而不是使用全局。

SqlConnection newConn = new SqlConnection(connectionString);
newConn.Open();
myCommand = new SqlCommand(SqlQuery, newConn);
//Rest of logic
newConn.Close();