はじめに
SQL Serverを利用するアプリケーションにおいて, 初回のデータベースオープン時に以下の例外が出力される事象が発生しました.
SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました)
SQL Server構成マネージャーで該当インスタンスの状態を確認すると, 「停止」状態となっており, これが原因でアクセスできず例外が出力されていました.
「停止」状態になっていること自体が問題ですが, これまでSQL Serverのサービス状態を確認, 変更する処理を実装したことがなかったので, 勉強がてら, SQL Serverサービスを起動する処理を実装してみました.
管理者権限で起動する
SQL Serverのサービスの状態を変更するには, 管理者権限を付与する必要があります.
以前投稿させていただいた以下の記事のように起動時に管理者権限で起動するアプリケーションとなっていることとします.
SQL Serverサービス状態の確認・起動
SQL Serverサービス状態の確認・起動には, System.ServiceProcessを参照し, ServiceControllerクラスを使用します.
以下のStartMSSqlService()メソッドは, 該当インスタンス状態を確認して「停止」状態であれば起動するようにしています.
//using System.ServiceProcess;
static ServiceControllerStatus StartMSSqlService(string instanceName)
{
if (string.IsNullOrEmpty(instanceName))
throw new ArgumentNullException(nameof(instanceName));
try
{
using (var controller = new ServiceController($"MSSQL${instanceName}", "."))
{
if (controller.Status == ServiceControllerStatus.Stopped)
{
controller.Start();
controller.WaitForStatus(ServiceControllerStatus.Running);
}
return controller.Status;
}
}
catch
{
throw;
}
}
最後に
System.ServiceProcess.ServiceControllerクラスを利用することで, SQL Serverサービスの状態確認やサービスの開始/停止の処理が実現できます.