M. Daban Ответов: 2

Как закрыть соединение с базой данных в службе windows


У меня есть служба windows для резервного копирования баз данных sql
это работает хорошо, но после любого резервного копирования базы данных служба сохраняет соединение открытым в течение некоторого времени, что замедляет работу базы данных при резервном копировании многих баз данных
в чем проблема?

Что я уже пробовал:

private void BackupSqlServerDB(string BackupPath, string DBName, string DBCon)
 {

     SqlConnection Con = new SqlConnection();
     try
     {
         System.DateTime TheTime = DateTime.Now;

         string fileName = DBName + ".bak";
         BackupPath = Path.Combine(BackupPath, fileName);
         if (System.IO.File.Exists(BackupPath))
             System.IO.File.Delete(BackupPath);
         if (System.IO.File.Exists(BackupPath + ".zip"))
             System.IO.File.Delete(BackupPath + ".zip");
         Con.ConnectionString = DBCon;
         Con.Open();
         SqlCommand Cmd = new SqlCommand();
         Cmd.Connection = Con;
         Cmd.CommandText = "BACKUP DATABASE " + DBName + " TO DISK ='" + BackupPath + "';";
         Cmd.CommandTimeout = 360;
         Cmd.ExecuteNonQuery();
         Cmd.Dispose();
         Con.Close();
         Con.Dispose();
         GC.Collect();


     }
     catch (Exception ex)
     {

         AddLog(ex.Message, "Preparing Sql Backup", true);
     }
     finally
     {
         Con.Close();
         Con.Dispose();
         GC.Collect();
     }
 }

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Ты уже делаешь это с Коном.Закрыть и Кон распоряжаться. Простое открытие соединения не замедлит работу базы данных для любых других операций.


Рейтинг:
14

RickZeeland

Вы можете попробовать использовать:

SqlConnection.ClearAllPools();


M. Daban

хорошо, что это работает, но закрывает ли он просто мои служебные соединения или все соединения?

RickZeeland

Это влияет на все соединения, цитата:
ClearAllPools сбрасывает (или опустошает) пул соединений. Если во время вызова используются соединения, они помечаются соответствующим образом и будут отброшены (вместо того, чтобы быть возвращенными в пул) при вызове Close.
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.clearallpools(v=vs. 110).aspx

M. Daban

Я только что протестировал его, он закрывает только соединения моего сервиса
вот чего я хочу!
Спасибо