عدم اجرای دستورات درون شرط If بدون استفاده از Breakpoint
من در حال توسعه و نوشتن یک برنامه ویندوزی با wpf و سی شارپ با پایگاه داده sql هستم.
به یک مشکل عجیب برخوردم.
برای کمبوباکس موجود در پنجره رخداد زیر تعریف شده
private void ComboBox_GotFocus(object sender, RoutedEventArgs e)
{
if (PublicVariables.LimitedDisplayMenues == false)
{
// do
}
else
{
if(CheckInsemination() == false)
{
//do
}
}
}
که تابع فراخوانی شده به شکل زیر هست
private bool CheckInsemination()
{
var dupParam = new SqlParameter("DuplicateData", System.Data.SqlDbType.Bit)
{
Direction = System.Data.ParameterDirection.Output
};
var lidParam = new SqlParameter("LivestockID", ComboBox_id.Text);
var insdParam = new SqlParameter("InseminationDate",PersianDateString.ConvertPersianDateTo10Characters(date.SelectedDate));
db.Database.ExecuteSqlCommand("InseminationChk @LivestockID,@InseminationDate,@DuplicateData out", lidParam, insdParam, dupParam);
var duplicateInsemination = (Boolean)dupParam.Value;
if (duplicateInsemination == false)
{
return true;
}
return false;
}
این تابع یک مقدار برگشتی از یک رویه ذخیره شده در sql را دریافت میکند.
و اما مشکل :
در اولین اجرا ( و تا n امین اجرا) قسمت else تابع به درستی کار نمیکند. جالب اینجاست وقتی برای خطایابی یک breakpoint گذاشتم همه چیز درست بود و بعد از اون هم با برداشتن breakpoint همه چیز درست اجرا میشه.
این کارو چندین بار انجام دادم یعنی چندین بار پایگاه داده رو خالی کردم و مجدد از صفر برنامه رو شروع کردم. تا وقتی یکبار breakpoint نذارم تابع درست اجرا نمیشه.
توضیحات تکمیلی :
رویداد ComboBox_GotFocus اتفاق میوفته، با توجه به اینکه شرط if اتفاق نمیوفته میره بخش else انجام میشه. پس تابع CheckInsemination() فراخوانی میشه. این تابع هم پارامترها رو به stored procedure میفرسته و مقدار برگشتی رو از اون دریافت میکنه. و مقدار بازگشتی به رویداد ComboBox_GotFocus ارسال میشه. تمام این فرآیند به درستی انجام میشه.
مشکل اینجاست در حالت عادی دستور داخل else انجام نمیشه. حتی اگر این روند چندین و چند بار انجام و تکرار بشه.
من وقتی دیدم این دستورات ظاهرا به درستی انجام نمیشه از breakpoint استفاده کردم دیدم تمام فرآیند و پارامترهای ارسالی و دریافتی درست هستند. و بعد از اون یک بار اجرا به واسطه breakpoint، بعدا همه چیز درست انجام میشه هر چند باری که انجام بدم.
من این چرخه رو بارها بارها تکرار کردم. (برای تکرار هر مرتبه چرخه با توجه به شرایط که باید حاصل بشه هر بار داده های پایگاه داده رو پاک میکنم) تا یک بار breakpoint نذارم و دستورات رو خط به خط با F10 جلو نبرم روند کلی درست اجرا نمیشه. یعنی تا مرحله که که تابع CheckInsemination مقدار ور برمیگردونه همه چیز درست هست و شرط داخل else رویداد ComboBox_GotFocus برقرار میشه ولی دستورات داخل else به درستی انجام نمیشه.
نمیدونم واقعا تونستم مشکل روشن کنم یا نه؟
این مشکل از مشکلات کمیاب و عجیب هست. در این موارد نمیشه دنبال راه حل توی کدها بود. بنظرم کارهای زیر رو انجام بدید شاید نتیجه گرفتید :
- یکبار پروژه رو از Clean کنید و سپس Build کنید و تست کنید.
- فایلهای موجود در پوشه های debug و release رو حذف کنید و مجدد پروژه رو Rebuild کنید.
- یکبار Visual Studio رو ری استارت کنید و یا حتی یکبار ویندوز رو ری استارت کنید.
اگر همه این کارها رو کردید و نتیجه نگرفتید یک پروژه خالی ایجاد کنید و همین تکه کد رو ببرید توی اون پروژه خالی تست کنید.
سلام
کارهای که hamid_b گفته بود، انجام دادم و مشکل حل نشد.
به صورت ریزتر و دقیق تر بررسی کردم و حالت های مختلف و روش های مختلف ورود و ثبت اطلاعات در اون پنجره رو یک به یک بررسی کردم و بالاخره موفق به یافتن مشکل و حل اون شدم.
مشکل از منطق برنامه بود که رفع شد.
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf