SQLサーバーが接続可能かどうかをチェックする小さなコードを作成しようとしています。そして:そうであれば、データベースが存在するかどうかを確認する必要があります。コードで説明しましょう。
これは私の主な方法です:
private static void Main(string[] args)
{
Database.SetInitializer<MyDbContext>(new DropCreateDatabaseAlways<MyDbContext>());
Console.WriteLine(CheckIfDatabaseExists("Data Source=127.0.0.1\\SQLEXPRESS2;Initial Catalog=SQLTest;Integrated Security=True;Connect Timeout=3"));
Console.WriteLine(CheckIfDatabaseExists("Data Source=127.0.0.1\\SQLEXPRESS;Initial Catalog=SQLTest;Integrated Security=True;Connect Timeout=3"));
Console.WriteLine(CheckIfDatabaseExists("Data Source=127.0.0.1\\SQLEXPRESS2;Initial Catalog=SQLTest;Integrated Security=True;Connect Timeout=3"));
}
ご想像のとおり、ローカル SQL サーバー「SQLEXPRESS」に既存のデータベース「SQLTest」があります。しかし: 'SQLEXPRESS2' のようなサーバーはありません!
わかりました - より多くのコード。ここに私のチェック方法があります:
public static DatabaseExistsStatus CheckIfDatabaseExists(String connString)
{
try
{
using (var db = new MyDbContext(connString))
{
bool DbExists = db.Database.Exists();
if (DbExists)
{
// database is existing
return DatabaseExistsStatus.EXISTING;
}
else
{
// config is working, but database does not exist
return DatabaseExistsStatus.NO_DB;
}
}
}
catch (Exception)
{
// no working config
return DatabaseExistsStatus.NO_CONNECTION;
}
}
public enum DatabaseExistsStatus
{
EXISTING,
NO_CONNECTION,
NO_DB
}
アプリを起動すると、次の結果が得られます。
NO_CONNECTION
EXISTING
NO_DB
私は混乱しています!私は "NO_CONNECTION, EXISTING, NO_CONNECTION" を期待していました。
それだけです!バックグラウンドで何が起こっているのか、制御を取得する方法がわかりません。
そこで何が起こっているのか、どうすれば修正できますか?