我有一个程序可以在执行系统上执行大量配置,共享文件夹,检查防火墙,查找孤立的数据库等等。
它做的一件事是它查找已删除MDF文件的数据库。我希望程序使用缺少的MDF分离或删除数据库。该程序使用SMO进行数据库操作。
我尝试了以下
string sqlCommand = string.Format("DROP DATABASE [{0}]", databasename);
server.KillAllProcesses(databasename);
server.ConnectionContext.ExecuteNonQuery(sqlCommand);
和
server.DetachDatabase(databasename, false);
和
string dbQuery = string.Format("ALTER DATABASE \"{0}\" SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE \"{0}\" SET SINGLE_USER EXEC sp_detach_db '{0}'", databasename);
server.ConnectionContext.ExecuteNonQuery(dbQuery);
无论我尝试删除或分离数据库,我都会遇到异常:
Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常。 ---> System.Data.SqlClient.SqlException:无法打开物理文件“掩码文件名”。操作系统错误2:“2(系统找不到指定的文件。)”。 vid Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction操作,Object execObject,DataSet fillDataSet,Boolean catchException) vid Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand,ExecutionTypes executionType)
有没有其他方法可以通过编程方式执行此操作,还是以错误的方式处理事情?