PDA

View Full Version : سوال: کنترل استثناها



Reza_Yarahmadi
دوشنبه 28 اردیبهشت 1388, 20:46 عصر
سلام
توی Sql Server چطور میشه استثناها رو کنترل کرد. چیزی مثل try - catch توی #C
اگه راهنماییم کنید ممنون میشم.

pooyamirzapour
سه شنبه 29 اردیبهشت 1388, 11:16 صبح
از ساختار try catch می تونی استفاده کنی
یه مثال می ذارم
BEGIN TRY
SELECT 100/0
END TRY
BEGIN CATCH
PRINT N'خطای تقسیم بر صفر'
PRINT ERROR_LINE()
PRINT ERROR_MESSAGE()
PRINT ERROR_SEVERITY()
PRINT ERROR_STATE()
PRINT ERROR_NUMBER()
END CATCH

Reza_Yarahmadi
سه شنبه 29 اردیبهشت 1388, 23:17 عصر
این چیزی که گفتید توی 2000 جواب نمیده.
من مجبورم به خاطر اینه روی سیستم مشتری 2000 نصبه با اون کار کنم. روش دیگه ای هست که با 2000 هم کار کنه؟

pooyamirzapour
چهارشنبه 30 اردیبهشت 1388, 09:56 صبح
بعد از هر خطا متغیر @@ERROR ست میشه می تونی اون رو چک کنی تا متوجه بشی خطا رخ داده یانه مثلا
SELECT 100/0
SELECT @@ERROR
چون خطای تقسیم بر صفر اتفاق افتاده سلکت دوم مقدار 8134 رو بر می گردونه که شماره خطاست
در حالتی که خطایی رخ نداده مقدار این متغیر صفره.

Reza_Yarahmadi
چهارشنبه 30 اردیبهشت 1388, 11:55 صبح
من کاری به متن خطا و شماره خطا ندارم. الان مشغول انجام یه پروژه ASP هستم ، مشکل من اینجاست که وقتی یه Trigger توی بانک میزارم که وقتی از یکی از جدولها مقداری حذف شد از یه جدول دیگه یه رکورد آپدیت بشه. زمانی که درخواست حذف از جدول اول رو میدم یه صفحه خطا ظاهر میشه که میگه یه Exception رخ داده و ...، وقتی به جای Trigger از یه Store Proc استفاده میکنم بطوری که هر دو کارو انجام بده بازم همون Exception رخ میده.
حالا من میخوام توی Store Proc یه طوری این مشکل رو کنترل کنم. اینم بگم در هر دو صورت ، چه استفاده از Trigger و چه استفاده از Store Proc کاری که میخوام رو انجام میده ولی صفحه خطا هم ظاهر میشه!!

pooyamirzapour
چهارشنبه 30 اردیبهشت 1388, 13:00 عصر
یه مثال که نشون میده چطور خطا رو هندل کنی
با استفاده از transaction

DECLARE @intErrorCode INT
BEGIN TRAN
PRINT 100/0
SET @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM
COMMIT TRAN
PROBLEM:
IF (@intErrorCode <> 0)
BEGIN
ROLLBACK TRAN
--کد مورد نظر برای هندل کردن خطا
PRINT N'خطای تقسیم بر صفر'
END

Reza_Yarahmadi
چهارشنبه 30 اردیبهشت 1388, 17:11 عصر
قبل از هر چیزی از اینکه راهنماییم میکنید ممنونم
اما مثل اینکه من نمی تونم درست مقصودم رو برسونم!!:گیج:
به کد زیر نگاه کنید


if((select count(*) from Customers where idd = @Key) = 0)
begin
delete from DslamCenter where idd = @Key
update TelecommunicationCenter set DslamNumber = DslamNumber - 1 where TelCenter like @TelCenter
end

این بخشی از Store Proc منه که باهاش مشکل دارم وقتی خط Update رو حذف میکنم مشکلی پیش نمیاد و همه چی درست کار میکنه اما من نیاز دارم این Update انجام بشه! وقتی این خط رو اضافه میکنم زمان اجرا همه دستورات انجام میشه ولی در آخر پیغام زیر نمایش داده میشه
Specified argument was out of the range of valid values.
من میخوام چیزی مثل کد زیر رو توی Sore Proc بنویسم


try
{
update ....
}
catch { }

معادل این توی Sql Server چیه؟