无法在脱机的数据库上调用sp_detach_db

时间:2010-02-25 18:24:31

标签: c# sql-server-2008 ado.net

我可以在SqlManager中运行此命令来分离db

ALTER DATABASE mydb SET OFFLINE WITH ROLLBACK IMMEDIATE

GO

dbo.sp_detach_db @dbname = N'mydb',@keepfulltextindexfile = N'false'

当我使用相同的连接时,通过ado.net运行相同的commadn失败并显示错误:

The database 'mydb' can not be opened because it is offline 

(错误是从德语翻译过来的。)

Ado.Net代码

            SqlCommand cmdOffline = new SqlCommand(@"ALTER DATABASE mydb SET OFFLINE WITH ROLLBACK IMMEDIATE");
            cmdOffline.Connection = prepareMasterDBConnection;
            cmdOffline.ExecuteNonQuery();


            SqlCommand cmdDetach = new SqlCommand(@"dbo.sp_detach_db @dbname = N'mydb',@keepfulltextindexfile = N'false'");
            cmdDetach.Connection = prepareMasterDBConnection;
            cmdDetach.ExecuteNonQuery();

连接设置为master - DB并打开。第一个commadn成功超越。

从ado和sql-manager调用代码时有什么不同?

2 个答案:

答案 0 :(得分:1)

如果您的目标是在删除连接时避免冲突,而不是在分离之前将其设置为脱机,我会使用命令ALTER DATABASE mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE而不是将其设置为脱机(并使用ALTER DATABASE mydb SET MULTI_USER将其反转)

答案 1 :(得分:0)

分离需要在分离之前做一些事情。就像s_detach所说的那样(我的大胆)

  

@skipchecks ='skipchecks'

     

指定是跳过还是运行   更新统计。 skipchecks是一个   nvarchar(10)值,默认值   NULL的值。跳过更新   ç计,指定为真。至   显式运行UPDATE STATISTICS,   指定false。

     

默认情况下,UPDATE STATISTICS为   执行以更新有关的信息   表中的数据和索引   SQL Server 2005数据库引擎。   执行UPDATE STATISTICS非常有用   对于要移动到的数据库   只读媒体。

当它离线时,你不能这样做......