2012-06-08 8 views
1

Я занимаюсь разработкой службы Windows на C# и несколько раз обращается к базе данных, когда файлы удаляются в определенный каталог. Кроме того, у меня есть service_timer, который запускается каждые 5 минут, который также обращается к базе данных. Проблема в том, что когда моя служба обрабатывает файл и вызывается мой service_timer, я получаю InvalidOperationError (уже есть открытый Data Reader).InvalidOperationException с 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"]); 
       } 
+1

Да, обязательно создайте новое локальное соединение db в обратном вызове таймера. –

+0

Ну, я каждый раз создаю новый SQLConnection. – user1287523

+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(); 
+0

Спасибо! Я попробую это завтра и дам вам знать, как это работает. – user1287523

+0

Теперь я получаю это исключение: System.Data.SqlClient.SqlException (0x80131904): Ошибка входа для пользователя «USERNAME». Он будет по-прежнему правильно подключаться к вызовам БД в основной службе. – user1287523

+0

Вы используете ту же строку соединения, что и в другом методе? –

Смежные вопросы