我想从我的 C# 代码中将数据库从 SQL Server 2005 中分离出来。我使用 DROP 查询来分离。但它声明从我的本地系统中删除文件。我想分离数据库并在运行时复制该数据库。
5 回答
首先尝试在SQL Server
不提供任何数据库名称或路径的情况下连接到,如下所示:
ConnectionString = @"Data Source= YourDataSource ;Integrated Security=True;Connect Timeout=30";
注意:
YourDataSource 可以是.
or .\SQLEXPRESS
or .\MSSQLSERVER
or or (local)\SQLEXPRESS
or (localdb)\v11.0
or etc.
然后通过使用以下查询,分离您的数据库。
"ALTER DATABASE [your DB] SET OFFLINE WITH ROLLBACK IMMEDIATE \n\r exec sp_detach_db @dbname = [your DB]";
好的。
我的示例代码:
sql_connect1.ConnectionString = @"Data Source=.\sqlexpress;Integrated Security=True;Connect Timeout=30";
sql_command.CommandText = "ALTER DATABASE [IRAN] SET OFFLINE WITH ROLLBACK IMMEDIATE \n\r exec sp_detach_db @dbname = [IRAN]";
sql_command.Connection = sql_connect1;
sql_connect1.Open();
sql_command.ExecuteNonQuery();
sql_connect1.Close();
SQL Server SMO API 让您可以做任何 Sql Server 管理工作室可以做的事情(来自 c# 代码)。查看此链接 http://msdn.microsoft.com/en-us/library/ms162175.aspx
您可以通过以下代码在SqlServer 上分离数据库: SqlServedr 'sp_detach_db' 中有一个用于分离数据库的存储过程,有一个参数DataBaseName。代码中的“MyDatabase”是数据库名称,您应该将其更改为您的数据库名称
// C# Code
SqlConnection conn = new SqlConnection("Server=(local); Data Source=;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("", conn);
cmd.CommandText = "sys.sp_detach_db MyDatabase";
conn.Open();
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Dispose();
Myo Thu 的评论将我引向了正确的方向,因此这里总结了有关如何分离数据库的步骤。
第 1 步:在您的项目[Reference]中引用以下 DLL :
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.SqlEnum.dll
第2步:使用:
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
第 3 步:代码
var server = new Server(new ServerConnection(@"MyMachine\SQL2012"));
// Ensure database is not in use
server.KillAllProcesses("TestDatabase");
server.DetachDatabase("TestDatabase", true);
编辑:现在记录在我的博客中
您可以使用存储过程来解决您的问题。以下链接可能有用: