首页 > 解决方案 > 使用 C# 备份托管在服务器上的 SQL Server 数据库时出现问题

问题描述

我在 LAN 网络中安装了 Windows 应用程序,并在服务器 PC 上部署了数据库(例如 PC 名称为 1)。

现在,当另一台 PC(PC 名称为 2)的用户正在使用他的 PC (2) 和数据库(在 PC 1 上)中的应用程序时。

单击按钮后,我想进行数据库备份并将该备份存储在 PC 1 的固定路径上。

目前我正在使用以下代码:

System.IO.Directory.CreateDirectory("Fixed path");

DASQLBase thebase = new DASQLBase(Global.gMasterConnectionString);

List<SqlParameter> paras = new List<SqlParameter>();

paras.Add(new SqlParameter("@BackupFolderPath ", "Fixed Path"));

thebase.ExecuteSPDataTable("proc_BackupData", paras);

这是 SQL Server 存储过程:

DECLARE 
    @databasename AS NVARCHAR(128)
    , @timecomponent AS NVARCHAR(50)
    , @sqlcommand AS NVARCHAR(1000);

SET @databasename = (SELECT MIN(name) FROM sys.databases 
                     WHERE name IN ('CP001','CP002','CP003','CP004','CP005','CP006','CP007','CP008','CP009','CP010')); 
    --AND name NOT IN ('master', 'model', 'msdb', 'tempdb'));

WHILE @databasename IS NOT NULL
BEGIN
    SET @timecomponent = REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR,
        GETDATE(), 120), ' ', '_'), ':', ''), '-', '');

    /*  SET @sqlcommand = 'BACKUP DATABASE ' + @databasename + ' TO DISK =
        ''C:\Backups\' + @databasename + '_' + @timecomponent + '.bak''';*/

    SET @sqlcommand = 'BACKUP DATABASE ' + @databasename + ' TO DISK =
        ''' + @BackupFolderPath  + @databasename + '_' + @timecomponent + '.bak'''

    EXEC(@sqlcommand);  

    SET @databasename = (SELECT MIN(name) FROM sys.databases 
                         WHERE name IN ('CP001','CP002','CP003','CP004','CP005','CP006','CP007','CP008','CP009','CP010')  
                           AND name > @databasename);
END

问题是如果代码和数据库在同一台电脑上运行(1)但不是从电脑上运行(2),那么数据库备份工作

标签: c#sqlsql-serverc#-4.0

解决方案


SQL Server 实例在安装了该实例的计算机上运行。所有 SQL 查询和过程都只具有执行机器上的本地资源范围。不是你电脑的资源。这是您在执行过程时遇到的麻烦。


推荐阅读