В начале моего приложения я успешно могу проверить, работает ли SQL Server, не запущен ли он, запустить конкретную службу, а затем проверить, подключена ли конкретная база данных.Но я хочу узнать, как проверить, подключена ли база данных через определенный интервал времени. Если база данных отключается, т.е., если база данных удаляется или переименовывается в бэкэнде во время работы приложения, то приложение должно автоматически завершиться.Как лучше всего этого добиться?
Как вызывать базу данных подключенной функции через определенные промежутки времени?Если он не подключен, он должен прекратить действие приложения.
namespace CLearning
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
bool isServiceRunning = false;
// Applying the required visual styles - we need to do it before we display any single form on the screen.
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Check specific SQL Server and database is running
isServiceRunning = DataAccessContext.CheckSQLServiceStatus();
if (isServiceRunning)
{
//SQL is running, checking for Local DB connection
bool isLocalDAOConnected = DataAccessContext.CheckIsLocalDAOConnected();
if (!isLocalDAOConnected)
{
MessageBox.Show(
"Database connection is not available on the machine. The application will termiante.",
"No database connection available",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
Application.Run(new Form1());
}
}
}
}
Класс DataAccess, который проверяет, работает ли сервер и подключена ли база данных, находится здесь
namespace CLearning.DataAccess
{
public class DataAccessContext
{
private static bool _isSQLServiceRunning = false;
private static bool _isLocalDAOConnected = false;
public static bool CheckSQLServiceStatus()
{
string myServiceName = "MSSQL$CLearning"; //service name of SQL Server Express
string status; //service status (For example, Running or Stopped)
//service status: For example, Running, Stopped, or Paused
ServiceController mySC = new ServiceController(myServiceName);
try
{
status = mySC.Status.ToString();
}
catch (Exception ex)
{
MessageBox.Show("SQL Service not found. It is probably not installed, application will terminate. [exception=" + ex.Message + "]");
return _isSQLServiceRunning;
}
//service status: For example, Running, Stopped, or Paused
_isSQLServiceRunning = true;
//if service is Stopped or StopPending, you can run it with the following code.
if (mySC.Status.Equals(ServiceControllerStatus.Stopped) | mySC.Status.Equals(ServiceControllerStatus.StopPending))
{
try
{
mySC.Start();
var timeout = new TimeSpan(0, 0, 5);
mySC.WaitForStatus(ServiceControllerStatus.Running,timeout);
_isSQLServiceRunning = true;
}
catch (Exception ex)
{
MessageBox.Show("Error in starting the service: " + ex.Message);
_isSQLServiceRunning = false;
}
}
return _isSQLServiceRunning;
}
public static bool CheckIsLocalDAOConnected()
{
try
{
GlobalConfig.Connection.TestConnection(); //SQL QUERY That checks for openning the connection
return _isLocalDAOConnected = true;
}
catch (Exception)
{
return _isLocalDAOConnected;
}
}
}
}
Пожалуйста, руководство.
Спасибо AA