5

DBの存在をチェックするエレガントな方法があるかどうか疑問に思っていますか?簡単に言えば、db接続文字列の接続をどのようにテストしますか?

ありがとう

4

8 に答える 8

18

Initial Catalog=master接続文字列にを設定し、以下を実行します。

select count(*) from sysdatabases where name = @name

@nameデータベースの名前に設定されます。

接続文字列全体をチェックしたい場合(独立したデータベースの存在ではない場合)、try/catchブロックで接続してみてください。

于 2009-05-16T20:41:51.363 に答える
5

可能性の範囲をカバーするために(サーバーが存在しない、データベースが存在しない、ログインがない、権限がない、サーバーがダウンしているなど)-最も簡単なアイデアは、通常どおりに接続を試み、些細なことを実行することです-SELECT GETDATE()たとえば。例外が発生した場合は、問題があります。

try/catchが最も実用的なオプションである場合があります(特にアウトプロセスシステムを扱う場合) 。

于 2009-05-16T20:45:06.690 に答える
4

あなたはそれに接続してみることができます。例外がスローされた場合は、データベースが存在しないか、パスワードが間違っているか、または他の何らかの方法で接続文字列が不良です。

DbConnection db = new SqlConnection(connection_string);
try
{
    db.Open();
}
catch ( SqlException e )
{
    // Cannot connect to database
}
于 2009-05-16T20:44:17.643 に答える
1

DBExceptionをキャッチするtryブロックにラップされたDBConnection.Open()を試してください。

あなたが見つけようとしているのと同じくらいエレガントな解決策。

于 2009-05-16T20:43:35.133 に答える
1

試す

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サーバーリソースを使用できると思います。

于 2009-05-16T21:08:58.800 に答える
1

Entity Frameworkを使用している場合、またはEntity Frameworkを利用できる場合は、Database.Exists()を呼び出すだけです。

if (Database.Exists(connectionString))
{
    // do something
}
else
{
    // do something else
}
于 2016-03-07T16:20:28.467 に答える
1

これは、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であるかどうかを簡単に確認できます。

于 2017-02-02T20:42:06.803 に答える
0

以下のデータベースのリストを取得し、データベース名を確認できます。

USE master
GO  
SELECT name, database_id, create_date  
FROM sys.databases ;  
GO
于 2018-02-16T04:30:54.487 に答える