با سلام،
در هنگام Backup و Restore شما به بانك مورد نظر متصل هستيد.
معمولاً پس از Backup در آينده مي خواهيد از آن استفاده كنيد و Restore نماييد...
شايد بشود روش شما را اصلاح كرد ولي اگر بخواهيد به همان صورتي كه Backup گرفته ايد Restore نماييد ، به هيچ عنوان موفق نخواهيد شد.
زيرا ديتابيسي كه در حال استفاده است و اتصال شما به SQLServer از طريق آن است اجازه نمي دهد آنرا Restore نماييد. (حداقل در همه حالات جواب نمي دهد؛ و يك برنامه نويس بايد تمام حالت ها را در نظر بگيرد.)
شما مي توانيد براي اين كار ديتابيس در حال استفاده را از ديتابيس خود به "master" تغيير دهيد و پس از اتمام Backup و يا Restore به حالت اول بازگردانيد.
ولي من براي اين كار (چون خودم يك دور سر همين پدرم درآمده) يك Script نوشته ام كه ميتوانيد در برنامه خود به صورت Script فراخواني كنيد و يا آنرا به صورت Stored Procedure درآوريد. (كه بهتر است و راحت تر است)
اسكريپت Backup كه يك Stored Procedure براي Backup مي سازد.
USE [نام ديتابيس]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[BackupDB]
@BackupPath varchar(max)
AS
backup database [نام ديتابيس] to disk =@BackupPath with INIT, SKIP, NOUNLOAD, STATS = 10
RETURN
و
اسكريپت Restore كه يك Stored Procedure براي Restore مي سازد.
use [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[RestoreDB]
@BackupPath varchar(max)
AS
RESTORE DATABASE [نام ديتابيس]
FROM DISK = " + "'" + RestorePath + "'" + " WITH RECOVERY, REPLACE
RETURN
در صورت هرگونه سوال در خدمتم.
موفق باشيد.