Service_timer的InvalidOperationException

时间:2012-06-08 20:17:41

标签: c# sql service timer invalidoperationexception

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

有没有办法为数据库创建新连接(在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"]);
                }

1 个答案:

答案 0 :(得分:2)

问题出在这里

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

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

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