我可以在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调用代码时有什么不同?
答案 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非常有用 对于要移动到的数据库 只读媒体。
当它离线时,你不能这样做......