You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于.NET Framework的Windows应用,如何通过代码而非导出向导从SSMS创建bacpac文件?

可以通过代码创建Bacpac文件

完全可以不依赖SSMS导出向导,用代码直接生成Bacpac文件,核心是借助Microsoft.SqlServer.Dac库实现。

核心依赖

先在项目中安装对应版本的Microsoft.SqlServer.Dac NuGet包(需匹配你的.NET Framework版本,比如.NET Framework 4.7.2可选择DacFx 15.x系列)。

代码示例

using Microsoft.SqlServer.Dac;
using System;

public class BacpacHandler
{
    // 导出Bacpac文件
    public static void ExportDatabaseToBacpac(string sourceConnString, string bacpacSavePath, string dbName)
    {
        try
        {
            var dacService = new DacServices(sourceConnString);
            // 监听导出进度(可选)
            dacService.Message += (sender, args) => Console.WriteLine(args.Message.Message);
            
            dacService.ExportBacpac(bacpacSavePath, dbName);
            Console.WriteLine("Bacpac文件导出完成");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"导出失败:{ex.Message}");
        }
    }

    // 导入Bacpac到目标数据库(同架构场景适用)
    public static void ImportBacpacToDatabase(string targetConnString, string bacpacFilePath, string targetDbName)
    {
        try
        {
            var dacService = new DacServices(targetConnString);
            dacService.Message += (sender, args) => Console.WriteLine(args.Message.Message);
            
            using (var bacpac = BacPackage.Load(bacpacFilePath))
            {
                dacService.ImportBacpac(bacpac, targetDbName);
            }
            Console.WriteLine("Bacpac文件导入完成");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"导入失败:{ex.Message}");
        }
    }

    // 调用示例
    static void Main(string[] args)
    {
        // 源数据库连接字符串
        string sourceConn = "Server=你的源服务器;Database=源数据库名;Integrated Security=True;";
        // 目标数据库连接字符串
        string targetConn = "Server=你的目标服务器;Database=目标数据库名;Integrated Security=True;";
        string bacpacPath = @"D:\Backups\MyDB.bacpac";

        // 导出
        ExportDatabaseToBacpac(sourceConn, bacpacPath, "源数据库名");
        // 导入
        ImportBacpacToDatabase(targetConn, bacpacPath, "目标数据库名");
    }
}

关键说明

  • DacServices是核心操作类,封装了数据库导出/导入的底层逻辑
  • 连接字符串对应的账号需要具备数据库备份/还原权限(比如db_owner角色)
  • 同架构场景下,导入时无需额外处理架构匹配,直接执行导入即可
  • 大数据库场景建议使用异步方法ExportBacpacAsync和ImportBacpacAsync,避免阻塞主线程

内容的提问来源于stack exchange,提问作者Krushal Sadariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:45:28