我正在制作一个C#程序,它与一些SQL Server数据库进行交互。问题是如果我连接到数据库(dbA),然后关闭此连接并打开另一个数据库(dbB),然后执行dbA还原,则SqlException会触发说正在使用数据库(dbA)。但是,如果我执行程序并仅连接到dbB,则可以毫无问题地恢复其他数据库,就像保存第一个连接一样。反正这里是代码,其中的连接应打开和关闭:C# - SQL连接不会关闭
private bool CheckConnection()
{
bool res = false;
string conString = string.Empty;
if (!String.IsNullOrEmpty(serverBox.Text) && !String.IsNullOrEmpty(dbBox.Text))
{
conString = ConcatConString(dbBox.Text);
using (SqlConnection conn = new SqlConnection(conString))
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
res = true;
}
}
}
return res;
}
ADO.NET使用连接池,这意味着连接“重置”并保留在池中以供重用。您需要关闭应用程序或者只需强制所有客户端在恢复之前断开连接 –
请使用堆栈跟踪添加完整的异常详细信息。另外,请分享调用此方法的代码。 –
这不是一个主要问题,因为恢复意味着*所有*用户将失去他们试图保存的任何内容。最好的选择是将数据库置于单用户模式,如[此处显示](http://dba.stackexchange.com/questions/101917/unable-to-restore-database-backup-because-it-is-accessed- by-other-connection),它将回滚任何活动的事务,执行restor然后返回数据库到多用户模式 –