使用C# Detach和Attach 数据库
来源:互联网 发布:淘宝自定义模块尺寸 编辑:程序博客网 时间:2024/06/06 19:09
先上一个使用SQL 语句进行Detach和Attach数据库的语句:
use mastergosp_detach_db 'TestDB'go use mastergosp_attach_db '1','C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestDB.mdf','C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestDB_log.ldf'go
用C#进行Detach和Attach数据库,我想到的有两种方法
1. 用SqlCommand执行上述语句,代码如下:
using(SqlConnectionsc =newSqlConnection(txtConntionString.Text))
{
using(SqlCommandcmd =newSqlCommand(@"use master;
exec sp_detach_db 'TestDB'", sc))
{
if(sc.State ==ConnectionState.Closed)
sc.Open();
cmd.CommandType =CommandType.Text;
cmd.ExecuteNonQuery();
}
}
using(SqlConnectionsc =newSqlConnection(txtConntionString.Text))
{
using (SqlCommandcmd =newSqlCommand(@"use master;
exec sp_attach_db 'TestDB'
,'C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestDB.mdf'
,'C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestDB_log.ldf'", sc))
{
if(sc.State ==ConnectionState.Closed)
sc.Open();
cmd.CommandType =CommandType.Text;
cmd.ExecuteNonQuery();
}
}
需要注意的是SQL语句中的go在这里换成了分号,SQL语句中不加exec也可以正常执行,而这里必须加入exec
因为用到了SqlConnection,所以必须指定一个有效的连接字串,在Detach时可以用TestDB这个数据库作连接字串,但是在Attach时,就不用TestDB了,因为还未创建,这点在写代码时要注意,当然如果连接字串中使用的是master数据库,那use master也可以省了
2. 使用SQL Server自带的Attach和Detach功能
这里有用到SQL Server提供的几个Dll
先加引用:
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.Smo
命名空间加:
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.Collections.Specialized;
代码如下:
ServerConnection sc = new ServerConnection("ServerNameHere");//You can specify username and password here
Server server = newServer(sc);
server.DetachDatabase("TestDB",false);
ServerConnection sc = new ServerConnection("ServerNameHere");//You can specify username and password hereServer server = new Server(sc);
StringCollection files = new StringCollection();files.Add(@"C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestDB.mdf");files.Add(@"C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/TestDB_log.ldf");server .AttachDatabase("TestDB", files, AttachOptions.None);
在执行完后可以调用Server的Disconnect方法关闭连接。
在detach和attach数据库时有一些选项,可以根据需要自己指定。
更新:
查看SQL Server帮助文档得知 sp_attach_db在今后可能弃用,建议使用create database,示例如下:
USE master;GOsp_detach_db Archive;GO-- Get the SQL Server data pathDECLARE @data_path nvarchar(256);SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1);-- Execute CREATE DATABASE FOR ATTACH statementEXEC ('CREATE DATABASE Archive ON (FILENAME = '''+ @data_path + 'archdat1.mdf'') FOR ATTACH');GO
不过目前在SQL Server 2008中sp_attach_db还是可以正常使用的
- 使用C# Detach和Attach 数据库
- SQL Server 使用Detach和Attach 方式 移动数据库位置
- attach和detach
- Attach、Detach和DeleteObject
- attach和detach
- Attach、Detach和DeleteObject
- Attach、Detach和DeleteObject
- Attach、Detach和DeleteObject
- Attach、Detach和DeleteObject
- attach和detach区别
- Attach()函数和Detach()函数
- 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库和日志文件移到新位置
- 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置(转载)
- 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置
- 如何通过使用 SQL Server 中的 Detach 和 Attach 函数将 SQL Server 数据库移到新位置
- GetOwner和Getparent,Attach和Detach
- 关于attach和detach的疑问
- MFC Attach()函数和Detach()函数
- 持久层_Review
- Javascript中最常用的55个经典技巧
- linux 时间&定时器 介绍
- CSS--用z-index进行层次堆叠
- 学习.Net的经典网站
- 使用C# Detach和Attach 数据库
- 深入了解 IBM Lotus Quickr V8.0
- 一个项目经理眼中的《2012》
- 注册表修改今日桌面左右软键的功能
- IIS错误信息--另一个程序正在使用此文件,进程无法访问
- 日期转换参数,值得收藏
- 《威博文件管理系统》3.0中短信系统的设计与实现
- IMS网络的功能实体介绍
- fork函数