How to check for the existence of a DB?

[亡魂溺海] 提交于 2019-11-29 07:24:40

Set the Initial Catalog=master in the connection string and execute:

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

with @name set to the name of the database.

If you want to check the connection string as a whole (and not existence of an independent database), try connecting to it in a try/catch block.

You could just try connecting to it. If it throws an exception, then the connection string is bad in some way, either the database doesn't exist, the password is wrong, or something else.

DbConnection db = new SqlConnection(connection_string);
try
{
    db.Open();
}
catch ( SqlException e )
{
    // Cannot connect to database
}

To cover the range of possibilities (server doesn't exist, database doesn't exist, no login, no permissions, server down, etc) - the simplest idea is simply to try to connect as normal, and perform something trivial - SELECT GETDATE() for example. If you get an exception, there is a problem!

There are times (especially when dealing with out-of-process systems) when try/catch is the most pragmatic option.

Just try a DBConnection.Open() wrapped in a try block catching DBException.

About as elegant a solution as you are going to find.

try

IF NOT EXISTS(SELECT * FROM sys.databases WHERE [name] = @name)
   CREATE DATABASE @name;
GO

or

IF db_id(@name) IS NOT NULL
   CREATE DATABASE @name;
GO

or SqlConnection.ChangeDatabase(String). I think it could use less sql server resources then new connection attempt.

If you're using Entity Framework or have it available to you, you can simply call Database.Exists():

if (Database.Exists(connectionString))
{
    // do something
}
else
{
    // do something else
}

This is what worked for me to verify the existence of any Postgres database with C#:

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; }
        }
    }
}

** The if used in the try-catch statement could simply check if the return of the ExecuteScalar is null for non-existent DB and not-null if it exists.

you can get list of Database with below and check your db name:

USE master
GO  
SELECT name, database_id, create_date  
FROM sys.databases ;  
GO
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!