DBの存在をチェックするエレガントな方法があるかどうか疑問に思っていますか?簡単に言えば、db接続文字列の接続をどのようにテストしますか?
ありがとう
DBの存在をチェックするエレガントな方法があるかどうか疑問に思っていますか?簡単に言えば、db接続文字列の接続をどのようにテストしますか?
ありがとう
Initial Catalog=master
接続文字列にを設定し、以下を実行します。
select count(*) from sysdatabases where name = @name
@name
データベースの名前に設定されます。
接続文字列全体をチェックしたい場合(独立したデータベースの存在ではない場合)、try/catch
ブロックで接続してみてください。
可能性の範囲をカバーするために(サーバーが存在しない、データベースが存在しない、ログインがない、権限がない、サーバーがダウンしているなど)-最も簡単なアイデアは、通常どおりに接続を試み、些細なことを実行することです-SELECT GETDATE()
たとえば。例外が発生した場合は、問題があります。
try/catch
が最も実用的なオプションである場合があります(特にアウトプロセスシステムを扱う場合) 。
あなたはそれに接続してみることができます。例外がスローされた場合は、データベースが存在しないか、パスワードが間違っているか、または他の何らかの方法で接続文字列が不良です。
DbConnection db = new SqlConnection(connection_string);
try
{
db.Open();
}
catch ( SqlException e )
{
// Cannot connect to database
}
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(String)。新しい接続の試行よりも少ないSQLサーバーリソースを使用できると思います。
Entity Frameworkを使用している場合、またはEntity Frameworkを利用できる場合は、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; }
}
}
}
** try-catchステートメントでifを使用すると、ExecuteScalarの戻り値が存在しないDBの場合はnullであり、存在する場合はnot-nullであるかどうかを簡単に確認できます。
以下のデータベースのリストを取得し、データベース名を確認できます。
USE master
GO
SELECT name, database_id, create_date
FROM sys.databases ;
GO