gpt4 book ai didi

c# - 如何分离 NCrunch 节点服务使用的所有 LocalDb 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:14 25 4
gpt4 key购买 nike

有时,不会运行使用 LocalDB 的测试的清理代码(可能是在取消测试时)。结果是大量垃圾本地数据库。

我在运行试图创建另一个 localDB 的测试时遇到这样的错误


System.Data.SqlClient.SqlException:无法创建/附加任何新数据库,因为现有数据库的数量已达到允许的最大数量:32765。
ved System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, bool breakConnection,Action`1 wrapCloseInAction)
ved System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常, bool breakConnection,Action`1 wrapCloseInAction)
ved System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
ved System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean& dataReady)
ved System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名称, bool 异步,Int32 超时, bool 异步写入)
ved System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 完成,String methodName,Boolean sendToPipe,Int32 timeout,Boolean& usedCache,Boolean asyncWrite,Boolean inRetry)
ved System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
ved Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn,CommandDefinition& 命令,Action`2 paramReader)
ved Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& 命令)
ved Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType)

测试清理在每个测试类中都是这样的(使用 xunit)

public override void Dispose()
{
base.Dispose();
FreeDb();
GC.SuppressFinalize(this);
}

private void FreeDb()
{
Task.Factory.StartNew(() =>
{
var masterConnectionString =
@"Data Source=(LocalDB)\MSSQLLocalDB;Integrated Security=True; Initial Catalog=master";
using (var dbConnection = new SqlConnection(masterConnectionString))
{
dbConnection.Execute($"ALTER DATABASE [{_databaseName}] SET OFFLINE WITH ROLLBACK IMMEDIATE");
dbConnection.Execute($"exec sp_detach_db '{_databaseName}'");
}
});
}

最佳答案

使用 Sql server Management Studio 连接到以下服务器 (LocalDb)\MSSQLLocalDB

然后使用以下语句确定哪些数据库是 localDb:

SELECT * FROM sys.databases

在此之后更正以下 detach localdb 语句以仅分离 localdbs:

DECLARE @rowCount INT = 1
DECLARE @databaseName NVARCHAR(MAX)

WHILE @rowCount = 1
BEGIN
SET @databaseName = null

SELECT TOP(1)
@databaseName = name
FROM sys.databases
WHERE database_id >= 5
SET @rowCount = @@ROWCOUNT

IF @rowCount = 1
BEGIN
exec sp_detach_db @databaseName
END
END

在我的例子中,似乎 database_id 4 以上的所有内容都是本地数据库,但这对您来说可能有所不同。

关于c# - 如何分离 NCrunch 节点服务使用的所有 LocalDb 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51858291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com