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

如何修改ASP.NET Core代码将在线SQL Server备份至本地指定路径?

解决ASP.NET Core远程SQL Server备份到本地电脑的问题

你遇到的错误核心是SQL Server的BACKUP DATABASE命令在数据库服务器端执行,代码里指定的C:\DatabaseBackupFile\是远程SQL服务器的本地路径,而非你自己电脑的路径,服务器找不到该目录才抛出“系统找不到指定路径”的错误。

方案一:先备份到服务器本地,再下载到客户端(推荐)

这种方法安全且易实现,步骤为:先将数据库备份到远程SQL服务器的可访问目录,再通过ASP.NET Core将备份文件下载到本地指定路径。

修改后的代码示例:

public async Task<IActionResult> TakeDatabaseBackup()
{
    try
    {
        var connectionString = "Data Source=SQLOnlineWebServer.com;Initial Catalog=DatabaseName;User Id=DatabaseUserName;Password=123456789";
        // 远程SQL服务器上的备份目录(需提前创建并给SQL Server服务账号分配读写权限)
        var serverBackupFolder = @"D:\SQLBackups\";
        Directory.CreateDirectory(serverBackupFolder);

        var sqlConStrBuilder = new SqlConnectionStringBuilder(connectionString);
        var backupFileName = $"{sqlConStrBuilder.InitialCatalog}-{GetLocalDateTime().ToString("MM-dd-yyyy-hh-mm-tt")}.bak";
        var serverBackupPath = Path.Combine(serverBackupFolder, backupFileName);

        // 执行服务器端备份
        using (var connection = new SqlConnection(sqlConStrBuilder.ConnectionString))
        {
            // 用[]包裹数据库名,避免名称含特殊字符报错
            var query = $"BACKUP DATABASE [{sqlConStrBuilder.InitialCatalog}] TO DISK='{serverBackupPath}' WITH INIT";
            using (var command = new SqlCommand(query, connection))
            {
                connection.Open();
                command.ExecuteNonQuery();
            }
        }

        // 将服务器备份文件下载到本地
        var localBackupFolder = @"C:\DatabaseBackupFile\";
        Directory.CreateDirectory(localBackupFolder);
        var localBackupPath = Path.Combine(localBackupFolder, backupFileName);

        // 若应用与SQL Server同服务器,直接拷贝;不同服务器则需用SMB共享/FTP等方式获取文件
        File.Copy(serverBackupPath, localBackupPath, overwrite: true);

        // 可选:删除服务器上的备份文件节省空间
        File.Delete(serverBackupPath);

        return Json(new { type = "success" });
    }
    catch (Exception ex)
    {
        return Json(new { type = "error", message = ex.Message });
    }
}

private DateTime GetLocalDateTime()
{
    return DateTime.Now; // 可根据需求改为UTC时间或服务器本地时间
}

注意事项

  • 必须给SQL Server服务账号分配远程服务器备份目录的读写权限。
  • 若ASP.NET Core应用与SQL Server不在同一服务器,需通过SMB共享、FTP或接口调用方式获取服务器上的备份文件,直接File.Copy仅适用于同服务器场景。

方案二:让SQL Server直接访问本地共享目录(不推荐,配置复杂)

若需直接备份到本地电脑,需完成以下配置:

  1. 在本地电脑创建共享目录C:\DatabaseBackupFile\,授予远程SQL Server服务账号(域账号或本地账号)完全控制权限。
  2. 修改备份命令,使用本地电脑的网络路径(如\\你的电脑IP\DatabaseBackupFile\)。
  3. 确保远程SQL服务器能访问本地共享目录(防火墙开放相关端口、网络环境允许)。

修改后的备份命令片段:

var localSharedPath = @"\\192.168.1.100\DatabaseBackupFile\"; // 替换为你的电脑IP和共享名
var fullBackupPath = Path.Combine(localSharedPath, backupFileName);
var query = $"BACKUP DATABASE [{sqlConStrBuilder.InitialCatalog}] TO DISK='{fullBackupPath}' WITH INIT";

这种方法对网络环境和权限配置要求极高,易出现权限不足或网络不通问题,不建议用于生产环境。

内容的提问来源于stack exchange,提问作者Hedayat Hoshmand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:17:50