我制作的一个安装程序,其中执行过程把一个数据库备份文件放在 C盘一个临时目录下,然后使用 函数执行 restore 语句创建数据库。通过调试,发现下面的语句
RESTORE FILELISTONLY FROM DISK ='C:\Users\star\AppData\Local\Temp\{AE572A70-F1C5-4D66-A6CD-72442D8BD9FA}\{53DC0509-AF7D-4454-AADD-0E1CDFF339E7}\mydb.bak'
执行失败。
----------------------------------------------------------------------
我把这个拷贝在sql server studio 中执行,发现错误依旧。错误提示为:
消息 3201,级别 16,状态 2,第 18 行
无法打开备份设备 'C:\Users\star\AppData\Local\Temp\{AE572A70-F1C5-4D66-A6CD-72442D8BD9FA}\{53DC0509-AF7D-4454-AADD-0E1CDFF339E7}\mydb.bak'。出现操作系统错误 5(拒绝访问。)。
消息 3013,级别 16,状态 1,第 18 行
RESTORE FILELIST 正在异常终止。
而我把mydb.bak文件拷贝到 'e:\'下,修改上述语句目录位置,执行是成功的。
为什么会这样呢?我的sql 2005 expresss studio 版本是 9.00.2047.00
------解决方案--------------------
这就说明你还原时,指定的物理文件不存在,建议不要写死,而是用物理文件存在的目录作为变量,然后在程序中动态执行之.