C# &引用;SqlException(0x80131904):无法打开数据库;当尝试删除DB时

C# &引用;SqlException(0x80131904):无法打开数据库;当尝试删除DB时,c#,sql-server,unit-testing,exception,C#,Sql Server,Unit Testing,Exception,当我试图删除由我们的一个集成测试创建的临时数据库时,收到下面的异常消息。有人能帮我理解它的确切含义吗 我假设所提到的数据库在尝试执行以下代码时不再存在,对吗?异常是由命令.ExecuteNonQuery()引起的 有趣的是,只有在我们的TFS实例上运行测试时,而不是在本地运行测试时,才会发生此异常。提前谢谢 private static void DropDatabase(IDbConnection connection) { var databaseName = GetDatabase

当我试图删除由我们的一个集成测试创建的临时数据库时,收到下面的异常消息。有人能帮我理解它的确切含义吗

我假设所提到的数据库在尝试执行以下代码时不再存在,对吗?异常是由
命令.ExecuteNonQuery()引起的

有趣的是,只有在我们的TFS实例上运行测试时,而不是在本地运行测试时,才会发生此异常。提前谢谢

private static void DropDatabase(IDbConnection connection)
{
    var databaseName = GetDatabaseName(connection.ConnectionString);
    var str = $@"USE master;
                 ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
                 DROP DATABASE [{databaseName}];";

    try
    {
        using (DbCommand command = new SqlConnection(connection.ConnectionString).CreateCommand())
        {
            command.CommandText = str;
            command.CommandType = CommandType.Text;
            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}

System.Data.SqlClient.SqlException (0x80131904): Cannot open database "MyTestDb_8647C" requested by the login. The login failed.
Login failed for user 'MYDOMAIN\MyServiceUser'.
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
    at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
    at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
    at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
    at System.Data.SqlClient.SqlConnection.Open()
    at [...].Testing.DatabaseTestBase.DropDatabase(IDbConnection connection) in D:\[...]\DatabaseTestBase.cs:line 37

您登录的默认数据库不再存在,或者连接字符串正试图连接到不存在的数据库。在连接字符串中,将
初始目录
属性设置为master。然后可以删除
USE MASTER
语句。此外,请确保登录的默认数据库设置为现有数据库。根据您的代码判断,您可能也希望使用master进行此操作。

为什么投票失败?请检查您的应用程序连接字符串错误非常明显。打开连接时,连接字符串(或登录名的默认数据库)请求该特定数据库,但该数据库不存在。通常我会看到,当编码人员不小心,依赖登录的默认数据库来建立到数据库的连接,而不是在连接字符串中指定它时。也许这就是为什么你把“usemaster”作为第一句话?