如何在 C# 中以编程方式在本地设备中分离数据库和复制 db 文件
本文关键字:数据库 分离 复制 db 文件 编程 方式 | 更新日期: 2023-09-27 18:35:28
我想将数据库与 SQL Server 2005 与我的 C# 代码分离。我使用 DROP 查询进行分离。但它语句从我的本地系统中删除了该文件。我想分离数据库并在运行时复制该数据库。
首先尝试连接到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();
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);
编辑:现在记录在我的博客中