DBが存在するかどうかを確認する方法?
-
22-08-2019 - |
質問
私は疑問に思って?簡単に言うと、どのようにデータベースの接続文字列の接続をテストしますか。
おかげ
解決
接続文字列でInitial Catalog=master
を設定し、実行します:
select count(*) from sysdatabases where name = @name
データベースの名前に設定@name
と。
、try/catch
ブロックで、それに接続してみてください。
他のヒント
あなたはそれに接続してみてください。それが例外をスローした場合は、接続文字列は、何らかの方法で悪いです、どちらかのデータベースが存在しない、パスワードが間違っている、または何か他のものである。
DbConnection db = new SqlConnection(connection_string);
try
{
db.Open();
}
catch ( SqlException e )
{
// Cannot connect to database
}
の可能性(サーバが存在しない場合、データベースが存在しない、ない、ログイン、無許可、サーバーダウンなど)の範囲をカバーするために - 最もシンプルなアイデアは、通常通りに接続しようと、些細な何かを実行するだけです - 例えばSELECT GETDATE()
。あなたは例外を取得した場合、問題があります!
try/catch
が最も実用的な選択肢である(アウトプロセスシステムを扱う特に)時間があります。
ただ、DBExceptionをキャッチtryブロックに包まれDBConnection.Openを()してみてください。
のようにエレガントなソリューションについては、あなたが見つけるしようとしているよう。
してみてください。
IF NOT EXISTS(SELECT * FROM sys.databases WHERE [name] = @name)
CREATE DATABASE @name;
GO
または
IF db_id(@name) IS NOT NULL
CREATE DATABASE @name;
GO
または SqlConnection.ChangeDatabase(文字列) に。私はそれが、新しい接続試行を少なくSQL Serverのリソースを使用できると思います。
あなたは、単に呼び出すことができ、エンティティフレームワークを使用するか、あなたにそれを用意している場合は、<のhref = "https://msdn.microsoft.com/en-us/library/gg696588(v=vs.113) .aspxの」REL = "nofollowを"> Database.Exists()の
if (Database.Exists(connectionString))
{
// do something
}
else
{
// do something else
}
このは、C#と任意のPostgresデータベースの存在を確認するために私のために働いたものです。
private bool chkDBExists(string connectionStr, string dbname)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStr))
{
using (NpgsqlCommand command = new NpgsqlCommand
($"SELECT DATNAME FROM pg_catalog.pg_database WHERE DATNAME = '{dbname}'", conn))
{
try
{
conn.Open();
var i = command.ExecuteScalar();
conn.Close();
if (i.ToString().Equals(dbname)) //always 'true' (if it exists) or 'null' (if it doesn't)
return true;
else return false;
}
catch (Exception e) { return false; }
}
}
}
それが存在する場合は、ExecuteScalarのリターンが存在しないDBのためのヌルとヌルでない場合は、**ザ・のtry-catch文で使用されている場合は、単にチェックすることができます。
あなたは以下とデータベースのリストを取得し、あなたのDB名を確認することができます:
USE master
GO
SELECT name, database_id, create_date
FROM sys.databases ;
GO