ورود

View Full Version : نحوه قطع ارتباط برنامه با بانك Sql



hamidprogramer
پنج شنبه 27 تیر 1387, 21:15 عصر
با عرض سلام؛
من براي بازيابي نسخه پشتيبان در بانك Sql يك SP درون Sql نوشتم و بدون مشكل ازآن در محيط Sql‌ استفاده مي كنم .
اما زماني كه مي خواهم از درون برنامه اون Sp رو اجرا كنم با خطايي مبني بر در حال استفاده بودن بانك برنامه مواجه مي شوم .
من به صورت زير ارتباط برنامه رو قبل از انجام عمليات بازيابي قطع مي كنم:
DM.Academy.Connected := False;
DM.Academy.KeepConnection := False;
DM.Academy.Close;
متن Sp هم در Sql به صورت زير مي باشد:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER Procedure [dbo].[Opr_RestoreDatabase]
(
@DataBaseName nvarchar(255),
@Address nvarchar(255),
@Password nvarchar(20)
)
As
Begin
if Exists (Select name from sys.databases Where name = @DataBaseName)
BEgin
Restore Database @DataBaseName from disk = @Address
With
Restricted_User,
Password = @Password
end
Else Return -1
End
ممنون مي شم اگر من رو در اين مورد راهنمايي كنين.

dkhatibi
پنج شنبه 27 تیر 1387, 23:12 عصر
شما از یک Stored Procedure استفاده می کنید که اون به بانک اصلی برنامه متصل شده است.
این Stored Procedure را به حای اتصال به بانک اصلی برنامه به یکی دیگر از بانکهای موجود مانند Master اتصال دهید.

hamidprogramer
جمعه 28 تیر 1387, 10:06 صبح
با سلام؛
دوست عزيز اگر به مطالب بنده خوب توجه مي فرموديد متوجه مي شديد كه من در برنامه Sql بدون مشكل از Sp مورد نظر استفاده مي كنم اين بدين معنا است كه من كاري رو كه شما گفتين انجام داده ام .
من اين Sp رو از درون بانك Master اجرا مي كنم.

Loveski
شنبه 29 تیر 1387, 17:19 عصر
سلام
بر برطرف کردن مشکلت از ADO هایی که دررون برنامه ات استفاده کردی ابتدا همه را به یکجای دیگری به غیر از Data Base خودت ارتباط بده و سپس این Sp را اجرا کن.

hamidprogramer
شنبه 29 تیر 1387, 20:32 عصر
با سلام؛
با تشكر از دوستاني كه سعي در كمك كردن به من داشتند.
مشكل من حل شد من مي بايست قبل از انجام عمليات بازيابي ديتا بيس رو به حالت تك كاربره مي بردم كه مشكلم حل بشه.
يعني اگر حتي يكبار من از طريق برنامه به بانك متصل مي شدم و اتصال خودم رو هم قبل از انجام عمليات بازيابي قطع مي كردم هم بازهم با خطاي در حال استفاده بودن بانك مواجه مي شدم كه با لطف برادر امين ثباتي اين مشكلم حل شد.
اينم لينك راهنمايي برادر ثباتي:

http://barnamenevis.org/forum/showthread.php?p=555323#post555323

اينم كد Sp اصلاح شده :


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



ALTER Procedure [dbo].[Opr_RestoreDatabase]
(
@Address nvarchar(255),
@Password nvarchar(20)
)
As
Begin
if Exists (Select name from sys.databases Where name = 'Academy')
Begin
ALTER DATABASE Academy
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE


Restore Database Academy from disk = @Address
With
Password = @Password
ALTER DATABASE Academy
SET MULTI_USER
end
Else Return -1
End