نمایش نتایج 1 تا 9 از 9

نام تاپیک: خطای تقسیم بر صفر در بانک

  1. #1
    کاربر دائمی آواتار ebrahim.rayatparvar
    تاریخ عضویت
    آبان 1392
    محل زندگی
    https://www.youtube.com/c/zangclass
    پست
    714

    Exclamation خطای تقسیم بر صفر در بانک

    سلام دوستان عزیز.

    من یه قطعه کدی دارم داخل try catch اینو نوشتم و کارش اینه که یه لیستی رو به من بده. زمان لیست دادن سمت sql نصف لیست داده میشه و وسط کار خطای تقسیم بر صفر میده ولی این خطا به سمت try catch مورد نظر سمت برنامه نمیاد همون چند سطر رو در داخل گرید میریزه. حالا خودتون هم بیاین یه پروسیجر تو sql درست کنید و کد select 1/0 رو داخلش بنویسید زمانی که سمت بر نامه این رو فراخوانی میکنید باید تو catch بیافته و مدیریتش کرد ولی این کار انجام نمیشه.

  2. #2

    نقل قول: خطای تقسیم بر صفر در بانک

    سلام
    به نظرم باید این خطا رو سمت خود اس کیو ال چک بکنید
    چون بالاخره کد داره اونجا کامپایل میشه و خروجی به برنامه شما بر میگیرده
    یک try catch توی اس کیو ال بزنید و اونچا مدیریتش کنید


    BEGIN TRY
    { sql_statement | statement_block }
    END TRY
    BEGIN CATCH
    [ { sql_statement | statement_block } ]
    END CATCH

  3. #3
    کاربر دائمی آواتار ebrahim.rayatparvar
    تاریخ عضویت
    آبان 1392
    محل زندگی
    https://www.youtube.com/c/zangclass
    پست
    714

    نقل قول: خطای تقسیم بر صفر در بانک

    سلام دوست من. من این داستان رو که تو try catch تو خود sql رو به دوستم که کد sql رو میزنه گفتم گقته من تمام کدها رو تو try catch میزنم و مدیریت میکنه مشکل اینه که تو sql ما خطا رو میبینیم ولی این خطا سمت برنامه نمیاد.

  4. #4
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: خطای تقسیم بر صفر در بانک

    خب مشخصه از خطای تقسیم بر صفر که لیست شما آیتمی نداره یا یک ایتم در آن قرار دارد که 1/2 یا 0/2 بصورت int صفر برگردانده میشود که طول لیست رو بر نتیجه محاسبه نصف طول لیست (صفر) تقسیم میکنی پس نتیجه آن خطای مذکور رخ می دهد.لازم به try,catch نیست با if خود کنترل کن که اگر طول لیست بزرگتر با مساوی دو بود نصف لیست برگردانده شود در غیر اینصورت خود لیست برگردانده شود.
    First,solve the problem then write the code

  5. #5
    کاربر دائمی آواتار ebrahim.rayatparvar
    تاریخ عضویت
    آبان 1392
    محل زندگی
    https://www.youtube.com/c/zangclass
    پست
    714

    نقل قول: خطای تقسیم بر صفر در بانک

    نقل قول نوشته شده توسط ژیار رحیمی مشاهده تاپیک
    خب مشخصه از خطای تقسیم بر صفر که لیست شما آیتمی نداره یا یک ایتم در آن قرار دارد که 1/2 یا 0/2 بصورت int صفر برگردانده میشود که طول لیست رو بر نتیجه محاسبه نصف طول لیست (صفر) تقسیم میکنی پس نتیجه آن خطای مذکور رخ می دهد.لازم به try,catch نیست با if خود کنترل کن که اگر طول لیست بزرگتر با مساوی دو بود نصف لیست برگردانده شود در غیر اینصورت خود لیست برگردانده شود.
    سلام مهندس جان.

    ببینید یه توضیح کوچیکی دیگه بدم اینه که ما یه گزارشی رو برای مشتری ارسال کرده بودیم سمت ما مشکلی نبود باید طبق قانون گزارش ما 13 ستون میامد ولی وقتی با مشتری داشتیم حرف میزدیم میگفت 4 ستون بیشتر تو نمودار نمیبینم ستون نه میله برای چارت های میله ای اینجور بهتره. ولی زمانی که ما تست میکردیم درست بود تا اینکه آرخر تونستیم بفمیم که تو یکی از سطر ها که سمت sql داره محاسبه میکنه یه جایی تقسیم بر 0 داریم که امدیم مدیریتش کردیم و درست کردیمش ولی برای فهمیدن مشکل از کجا هست تقریبا یک روز کاری ما رو گرفت که میدونید وقت برای هر فردی تو هر زمینه ای طلا هست ولی اما اگه همون اول خطای تقسیم بر صفر از تو sql که در سطر 5 ایجاد میشد به سمت برنامه میامد چنین وقی رو ما هدر نمیدادیم.

    الان فکر کنم بهتر توضیح دادم مشکل من مدیریت کردن این فرمول تو sql نیست مشکل من اینه چرا این چنین خطاهایی که در sql رخ میده حتی در داخل try catch هم باشه تو برنامه نمایش داده نمیشه که کاربر و ماهایی که میخوایم پشتیبانی انجام بدیم دچار مشکل نشیم.

  6. #6
    کاربر دائمی آواتار ebrahim.rayatparvar
    تاریخ عضویت
    آبان 1392
    محل زندگی
    https://www.youtube.com/c/zangclass
    پست
    714

    نقل قول: خطای تقسیم بر صفر در بانک

    یه نکته ای که هست شما همه میدونید sql زبان توصیفیه و مثل #C نیست که خط به خط بیاد چک کنه همه رو میگیره و جواب میده. مثال بالایی که زدم یکی از این نوع مشکلها بود حتی تو گزارش دیگه که این بیشتر اتفاق میافته ما توی ساخت گزارش خروجی رو در نظر گرفته بودیم int چون فکر نمیکردیم bigint بشه ولی تو یکی از سطر ها یکی از جواب ها شد bigint و خطا داد ولی باز هم گزارش سمت برنامه نمایش داده نشد.
    الان این کوئری رو ببینید :

    DECLARE @t_temp TABLE
    (
    name NVARCHAR(50)
    ,totallPrice INT
    );

    INSERT INTO @t_temp
    ( name ,totallPrice )
    VALUES
    ( N'ramin' -- name - nvarchar(50)
    ,123452678 -- totallPrice - int
    ),
    ( N'reza' -- name - nvarchar(50)
    ,852165289 -- totallPrice - int
    ),
    ( N'ebi' -- name - nvarchar(50)
    ,656525454 -- totallPrice - int
    ),
    ( N'sami' -- name - nvarchar(50)
    ,654655465 -- totallPrice - int
    ),
    ( N'zahra' -- name - nvarchar(50)
    ,655465235 -- totallPrice - int
    ),
    ( N'kolsom' -- name - nvarchar(50)
    ,656542654 -- totallPrice - int
    ),
    ( N'khadijeh' -- name - nvarchar(50)
    ,656542655 -- totallPrice - int
    );

    SELECT
    SUM(tt.totallPrice) OVER ( ORDER BY tt.totallPrice ) AS sum_price
    FROM
    @t_temp AS tt
    ORDER BY
    tt.totallPrice;


    این باید 7 سطر داشته باشه ولی از سطر 5 گفتم به جای اینکه int باشه bigint میشه شما اینو اجرا کنید میبینید 4 سطر جواب دارید و بعدش خطا میبینید که تو try catch سی شارپ نمیاد.

  7. #7

    نقل قول: خطای تقسیم بر صفر در بانک

    برای این کیوری که فرستادی میتونی با cast مشکلت رو رفع کنی

    DECLARE @t_temp TABLE
    (
    name NVARCHAR(50)
    ,totallPrice INT
    );





    INSERT INTO @t_temp
    ( name ,totallPrice )
    VALUES
    ( N'ramin' -- name - nvarchar(50)
    ,123452678 -- totallPrice - int
    ),
    ( N'reza' -- name - nvarchar(50)
    ,852165289 -- totallPrice - int
    ),
    ( N'ebi' -- name - nvarchar(50)
    ,656525454 -- totallPrice - int
    ),
    ( N'sami' -- name - nvarchar(50)
    ,654655465 -- totallPrice - int
    ),
    ( N'zahra' -- name - nvarchar(50)
    ,655465235 -- totallPrice - int
    ),
    ( N'kolsom' -- name - nvarchar(50)
    ,656542654 -- totallPrice - int
    ),
    ( N'khadijeh' -- name - nvarchar(50)
    ,656542655 -- totallPrice - int
    );

    BEGIN TRY


    SELECT
    SUM(CAST(tt.totallPrice as bigint)) OVER ( ORDER BY tt.totallPrice ) AS sum_price
    FROM
    @t_temp AS tt
    ORDER BY
    tt.totallPrice;


    END TRY


    BEGIN CATCH
    select 0 AS sum_price
    end CATCH


    برای اون خطای تقسیم بر 0 هم باید توی خود اس کیو ال روش کار کنی

    کد داره توی اس کیو ال کامپایل میشه
    و همونجا خطا میخوره

    فقط شما میتونی توی کدت بفهمی خطای اس کیو ال خوردی و مثلا به مشتری یک پیام مناسب نشون بدی یا حالا هر کار دیگه بسته به شزایط
    اما نمی تونی هندل کنی اون خطا رو

    try
    {
    //code
    }
    catch(SqlException sqlEx)
    {
    //code
    }

  8. #8

    نقل قول: خطای تقسیم بر صفر در بانک

    مشکل از کد شماست(برای بنده مشکلی ندارد). کد sql و کد سی شارپی که این مشکل رو داره بزارید.

  9. #9
    کاربر دائمی آواتار ebrahim.rayatparvar
    تاریخ عضویت
    آبان 1392
    محل زندگی
    https://www.youtube.com/c/zangclass
    پست
    714

    نقل قول: خطای تقسیم بر صفر در بانک

    نقل قول نوشته شده توسط Mag-Mag مشاهده تاپیک
    برای این کیوری که فرستادی میتونی با cast مشکلت رو رفع کنی

    DECLARE @t_temp TABLE
    (
    name NVARCHAR(50)
    ,totallPrice INT
    );





    INSERT INTO @t_temp
    ( name ,totallPrice )
    VALUES
    ( N'ramin' -- name - nvarchar(50)
    ,123452678 -- totallPrice - int
    ),
    ( N'reza' -- name - nvarchar(50)
    ,852165289 -- totallPrice - int
    ),
    ( N'ebi' -- name - nvarchar(50)
    ,656525454 -- totallPrice - int
    ),
    ( N'sami' -- name - nvarchar(50)
    ,654655465 -- totallPrice - int
    ),
    ( N'zahra' -- name - nvarchar(50)
    ,655465235 -- totallPrice - int
    ),
    ( N'kolsom' -- name - nvarchar(50)
    ,656542654 -- totallPrice - int
    ),
    ( N'khadijeh' -- name - nvarchar(50)
    ,656542655 -- totallPrice - int
    );

    BEGIN TRY


    SELECT
    SUM(CAST(tt.totallPrice as bigint)) OVER ( ORDER BY tt.totallPrice ) AS sum_price
    FROM
    @t_temp AS tt
    ORDER BY
    tt.totallPrice;


    END TRY


    BEGIN CATCH
    select 0 AS sum_price
    end CATCH


    برای اون خطای تقسیم بر 0 هم باید توی خود اس کیو ال روش کار کنی

    کد داره توی اس کیو ال کامپایل میشه
    و همونجا خطا میخوره

    فقط شما میتونی توی کدت بفهمی خطای اس کیو ال خوردی و مثلا به مشتری یک پیام مناسب نشون بدی یا حالا هر کار دیگه بسته به شزایط
    اما نمی تونی هندل کنی اون خطا رو

    try
    {
    //code
    }
    catch(SqlException sqlEx)
    {
    //code
    }
    مهندس جان اینکه با یه cast درست میشه رو ما هم فهمیدیم ولی منطور من اینه خطایی که روخ میده رو زمانی که برنامه دارین کار میکنید به سمت try catch خود همون sqlexception نمیاد منظور من اینه یعنی همون 4 سطری که ایجاد میشه رو نمایش میده و نمیگه از سر 5 خطا بوجود آمده.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •