2

我想从我的 C# 代码中将数据库从 SQL Server 2005 中分离出来。我使用 DROP 查询来分离。但它声明从我的本地系统中删除文件。我想分离数据库并在运行时复制该数据库。

4

5 回答 5

3

首先尝试在SQL Server不提供任何数据库名称或路径的情况下连接到,如下所示:

ConnectionString = @"Data Source= YourDataSource ;Integrated Security=True;Connect Timeout=30";

注意:
YourDataSource 可以是.or .\SQLEXPRESS or .\MSSQLSERVERor or (local)\SQLEXPRESSor (localdb)\v11.0or 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(); 
于 2015-01-03T14:38:55.890 回答
2

SQL Server SMO API 让您可以做任何 Sql Server 管理工作室可以做的事情(来自 c# 代码)。查看此链接 http://msdn.microsoft.com/en-us/library/ms162175.aspx

于 2012-05-26T03:51:02.133 回答
1

您可以通过以下代码在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();
于 2012-11-19T11:25:06.533 回答
0

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);

编辑:现在记录在我的博客中

于 2014-04-25T12:28:34.833 回答
0

您可以使用存储过程来解决您的问题。以下链接可能有用:

http://msdn.microsoft.com/en-us/library/aa259611.aspx

于 2013-06-21T15:52:51.590 回答