如何在 C# 中以编程方式在本地设备中分离数据库和复制 db 文件

本文关键字:数据库 分离 复制 db 文件 编程 方式 | 更新日期: 2023-09-27 18:35:28

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

如何在 C# 中以编程方式在本地设备中分离数据库和复制 db 文件

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

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

注意:
您的数据源可以是.的,也可以是.'SQLEXPRESS的,也可以是.'MSSQLSERVER的,也可以是(local)'SQLEXPRESS的,也可以是(localdb)'v11.0的,等等。

然后使用以下查询分离数据库。

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

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

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

Myo Thu的评论将我引向正确的方向,因此这里总结了如何分离数据库的步骤。

步骤 1:在项目中引用以下 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);

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