如何检查DB的存在?

时间:2009-05-16 20:38:31

标签: c# sql sql-server database connection-string

我想知道是否有一种优雅的方式来检查数据库是否存在?简而言之,如何测试数据库连接字符串的连接?

由于

8 个答案:

答案 0 :(得分:17)

在连接字符串中设置Initial Catalog=master并执行:

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

@name设置为数据库的名称。

如果要检查整个连接字符串(并且不存在独立数据库),请尝试在try/catch块中连接它。

答案 1 :(得分:4)

您可以尝试连接它。如果它抛出异常,那么连接字符串在某种程度上是错误的,数据库不存在,密码错误或其他。

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

答案 2 :(得分:3)

要涵盖各种可能性(服务器不存在,数据库不存在,没有登录,没有权限,服务器关闭等) - 最简单的想法就是尝试正常连接,并执行一些微不足道的事情 - 例如SELECT GETDATE()。如果你得到例外,那就有问题了!

有些时候(特别是在处理进程外系统时)try/catch是最实用的选项。

答案 3 :(得分:1)

如果您正在使用Entity Framework或者可以使用它,则只需致电Database.Exists()

LinkedHashMap<?,?>

答案 4 :(得分: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,如果存在则不为null。

答案 5 :(得分:1)

只需尝试将DBConnection.Open()包装在try块中捕获DBException。

关于您将要找到的优雅解决方案。

答案 6 :(得分: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服务器资源,然后尝试新的连接。

答案 7 :(得分:0)

您可以获取下面的数据库列表并检查您的数据库名称:

USE master
GO  
SELECT name, database_id, create_date  
FROM sys.databases ;  
GO