.net Core 中如果需要引用,需要事先安装两个包
Install-Package System.Data.Common
Install-Package System.Data.SqlClient
/// <summary>
/// 数据库操作帮助类
/// </summary>
internal class DataBaseHelper
{
/// <summary>
/// 连接字符串信息
/// </summary>
public DbConnectionStringBuilder ConBuiler { get; set; }
private DataBaseHelper()
{
}
/// <summary>
/// 创建实例
/// </summary>
/// <returns></returns>
public DataBaseHelper CreateInstance(DbConnectionStringBuilder builder)
{
var dbHelper = new DataBaseHelper();
dbHelper.ConBuiler = builder;
return dbHelper;
}
/// <summary>
/// 备份数据库
/// </summary>
/// <param name="dataBaseName"></param>
/// <param name="fileFullName"></param>
public int BackUp(string dataBaseName, string fileFullName)
{
using (var connection = new SqlConnection(ConBuiler.ConnectionString))
{
var sqlStr = @"USE [master]; BACKUP DATABASE [" + dataBaseName + "] TO DISK = '" + fileFullName + "' WITH INIT;";
var cmd = new SqlCommand(sqlStr, connection);
try
{
connection.Open();
var count = cmd.ExecuteNonQuery();
return count;
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 备份数据库
/// </summary>
/// <param name="restoreDataBaseName">还原的数据库名称(注意唯一性)</param>
/// <param name="fileFullName">备份文件完整物理路径</param>
public int Restore(string restoreDataBaseName, string fileFullName,string restoreDataBaseDir )
{
using (var connection = new SqlConnection(ConBuiler.ConnectionString))
{
try
{
connection.Open();
//获取备份文件的文件名
var sqlGetFile = "RESTORE FILELISTONLY from disk='{fileFullName}'";
var getFileCmd = new SqlCommand(sqlGetFile, connection);
SqlDataReader dr;
dr = getFileCmd.ExecuteReader();
var list =new List<string>();
while (dr.Read())
{
list.Add(dr.GetString(0));
}
dr.Close();
if (list.Count != 2)
{
throw new ArgumentException("非法的数据库备份文件。");
}
//开始还原
var sqlStr = $@"use [master];RESTORE DATABASE [{restoreDataBaseName}] FROM DISK='{fileFullName}'
with move '{list[0]}'
to '{restoreDataBaseDir}\{list[0]}.mdf',
move '{list[1]}'
to '{restoreDataBaseDir}\{list[1]}.LDF'";
var cmd = new SqlCommand(sqlStr, connection);
var count = cmd.ExecuteNonQuery();
return count;
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 删除数据库 删除或者附加前记得干掉所有的进程
/// </summary>
/// <returns></returns>
public int Drop()
{
// 执行 drop database databaseName
return 0;
}
/// <summary>
/// 分离数据库
/// </summary>
/// <returns></returns>
public int Detach()
{
//exec sp_detach_db DL_DZ_02
return 0;
}
/// <summary>
/// 附加数据库
/// </summary>
/// <returns></returns>
public int Attach()
{
//exec sp_attach_db DL_DZ_02,'E:\DbCreate\DBRestore\2347\DL_DZ.mdf'
return 0;
}
}