c# - 使用 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),那么数据库备份工作
解决方案
SQL Server 实例在安装了该实例的计算机上运行。所有 SQL 查询和过程都只具有执行机器上的本地资源范围。不是你电脑的资源。这是您在执行过程时遇到的麻烦。
推荐阅读
- .net - 由于访问被拒绝错误而无法启动程序
- maven - 在“Maven->Update project”之后,构建路径中源文件夹的配置已更改
- java - 使用来自 RESTful Web 服务端点调用的响应,以便稍后在其他 Web 服务端点调用中使用
- excel - Excel:OR + VLOOKUP 无法检测到某些值
- java - Kotlin - 我们如何使用 getter 和 setter 访问私有财产?访问方法是否在内部调用?
- c# - 用 override 和 new 关键字覆盖 ToString()
- html - 如何在 html 模板中呈现节点 js 数据?
- python - 尽管缩进正确,但 Python 缩进错误
- swift - 在 ARKit 1.5 中重置会话时删除文本节点
- android - Android 上的硬件加速 H.264/HEVC 视频解码到 OpenGL FBO 或纹理