1

好的,它们不是单元测试,而是端到端测试。设置有些复杂。单元测试将使用 C#、ODBC 连接。每个单元测试都会尝试自行清理,但每 20 次左右的测试(每个 C# 类一次)我们需要进行一次完整的数据库恢复。根据此文档,我认为我不能通过 ODBC 连接来完成此操作:

http://www.sql-server-performance.com/articles/dba/Obtain_Exclusive_Access_to_Restore_SQL_Server_p1.aspx

Msg 6104, Level 16, State 1, Line 1 不能使用 KILL 杀死你自己的进程。

但是,我想这样做,这样 199 次测试就不会因为清理不当而失控。还有其他方法吗?也许我可以打开一个不同的“连接”,例如使用 COM 自动化或类似的东西,然后从那里终止所有数据库连接?如果是这样,我该怎么做?

此外,客户端是否能够在还原后自动重新连接,或者我是否必须每 20 次左右的测试就拆除所有东西?

如果您觉得这个问题令人困惑,请告诉我您的问题。谢谢!

4

2 回答 2

1

如果您可以确保可以正确关闭 ODBC 连接,那么出于 C# 集成测试的目的,您可以直接使用 ADO.NET 对池中的新连接执行恢复。

我认为,如果您切换从快照而不是完整备份进行恢复,您可能会发现要快得多。

于 2011-01-06T21:53:11.377 回答
1

当然,您可以从 ODBC 连接中恢复。如果您正在使用要恢复的数据库,则无法恢复,但将上下文更改为tempdbor很简单master

USE [tempdb];
RESTORE DATABASE foo FROM ...;

如果有其他连接使用数据库,它们将是您自己的连接,因此只需确保正确关闭它们即可。如果您使用连接池,请清理池。SqlClient使用SqlConnectionClearAllPools时,ODBC 使用OdbcConnection.ReleaseObjectPool达到某种类似的效果。关键是这一切都在你的控制之下。

顺便说一句,您为什么使用 ODBC 而不是 SqlClient?

于 2011-01-06T21:54:08.267 回答