DBの存在を確認するエレガントな方法があるのでしょうか?簡単に言うと、db接続文字列の接続をテストするにはどうすればよいですか?DBの存在を確認する方法は?
select count(*) from sysdatabases where name = @name
データベースの名前に@name
セットで:接続文字列でInitial Catalog=master
を設定し、実行
おかげ
DBの存在を確認するエレガントな方法があるのでしょうか?簡単に言うと、db接続文字列の接続をテストするにはどうすればよいですか?DBの存在を確認する方法は?
select count(*) from sysdatabases where name = @name
データベースの名前に@name
セットで:接続文字列でInitial Catalog=master
を設定し、実行
おかげ
。
接続文字列全体をチェックしたい場合(独立したデータベースが存在しない場合)、try/catch
ブロックに接続してみてください。
DBExceptionをキャッチするtryブロックでラップされたDBConnection.Open()を試してみてください。
あなたが見つけ出すほどエレガントな解決策について。
接続できます。例外をスローすると、データベースが存在しないか、パスワードが間違っているか、何か他の何らかの形で接続文字列が不良です。最も単純なアイデアは、通常通りに接続しようとするだけで、 - 可能性の範囲を(サーバが存在しない場合、データベースが存在しない、ない、ログイン、無許可、サーバーダウンなど)を覆う
DbConnection db = new SqlConnection(connection_string);
try
{
db.Open();
}
catch (SqlException e)
{
// Cannot connect to database
}
何かを些細なことを実行 - 例えばSELECT GETDATE()
。例外が発生した場合は、問題があります。
try/catch
が最も現実的な選択肢である場合は、(特にアウトプロセスシステムを扱うときに)時間があります。
誰もがそれを落とした - それは安いショットです(私は何か愚かなことがない限り?)。受け入れられた答えと同じで、同じ時間枠で答えられます。あなたは私の同情がある。 –
"ネットワークステータス"チェックの目的で、単に接続を開くだけでなく、コマンドを実行する必要があることがわかりました(実際には「データベースに保存する」チェック)。 – peacedog
@peacedogしたがって、SELECT GETDATE() –
は
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 Serverのリソースを少なくしてから新しい接続を試みると思う。あなたはEntity Frameworkのを使用するか、あなたにそれを用意している場合は
することは、あなたは単にDatabase.Exists()を呼び出すことができます。
if (Database.Exists(connectionString))
{
// do something
}
else
{
// do something else
}
なぜこれがダウン表示されたのですか?それは動作し、 "エレガントな"要求に適合します。ロジックフローの一部として例外を使用するよりもはるかにエレガントです。 Entity Frameworkについての警告を追加しました。これはMS SQL Serverで使用するために設計されたMicrosoftライブラリです。 –
これは、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ステートメントで使用される場合は、存在しないDBの場合はExecuteScalarの戻り値がnullで、存在しない場合はnullでないかどうかを単純に確認できます。
あなたは以下とデータベースのリストを取得し、あなたのDB名を確認することができます。
USE master
GO
SELECT name, database_id, create_date
FROM sys.databases ;
GO
これが正しい答えでなければなりません... – bryanmac
はどのように私は、クエリが返すの上に知ることができますか? – revolutionkpi