من در حال توسعه و نوشتن یک برنامه ویندوزی با 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 به درستی انجام نمیشه.
نمیدونم واقعا تونستم مشکل روشن کنم یا نه؟
این مشکل از مشکلات کمیاب و عجیب هست. در این موارد نمیشه دنبال راه حل توی کدها بود. بنظرم کارهای زیر رو انجام بدید شاید نتیجه گرفتید :
اگر همه این کارها رو کردید و نتیجه نگرفتید یک پروژه خالی ایجاد کنید و همین تکه کد رو ببرید توی اون پروژه خالی تست کنید.
سلام
کارهای که hamid_b گفته بود، انجام دادم و مشکل حل نشد.
به صورت ریزتر و دقیق تر بررسی کردم و حالت های مختلف و روش های مختلف ورود و ثبت اطلاعات در اون پنجره رو یک به یک بررسی کردم و بالاخره موفق به یافتن مشکل و حل اون شدم.
مشکل از منطق برنامه بود که رفع شد.
تاریخ :
1403/12/23
- ساعت :
03:14:00 PM
- بازدید :
135
- پاسخ :
1
|
تاریخ :
1403/12/22
- ساعت :
11:05:00 AM
- بازدید :
187
- پاسخ :
1
|
تاریخ :
1399/11/25
- ساعت :
11:22:00 AM
- بازدید :
3896
- پاسخ :
2
|
تاریخ :
1403/12/02
- ساعت :
12:09:00 AM
- بازدید :
270
- پاسخ :
1
|
تاریخ :
1398/07/08
- ساعت :
12:21:00 AM
- بازدید :
3048
- پاسخ :
2
|
تاریخ :
1403/11/23
- ساعت :
08:24:00 PM
- بازدید :
191
- پاسخ :
2
|
تاریخ :
1399/11/10
- ساعت :
10:01:00 PM
- بازدید :
7167
- پاسخ :
4
|
تاریخ :
1399/04/09
- ساعت :
08:51:00 PM
- بازدید :
3094
- پاسخ :
1
|
تاریخ :
1399/03/25
- ساعت :
08:58:00 PM
- بازدید :
3825
- پاسخ :
1
|
تاریخ :
1398/10/03
- ساعت :
10:47:00 PM
- بازدید :
5336
- پاسخ :
8
|
تاریخ :
1404/01/07
- ساعت :
05:02:00 AM
- بازدید :
89
- پاسخ :
1
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1314
- پاسخ :
0
|
تاریخ :
1403/12/30
- ساعت :
06:43:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1398/08/23
- ساعت :
09:16:00 PM
- بازدید :
9852
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
12:18:00 PM
- بازدید :
37
- پاسخ :
1
|
تاریخ :
1404/01/03
- ساعت :
10:39:00 AM
- بازدید :
45
- پاسخ :
1
|
تاریخ :
1404/01/02
- ساعت :
05:05:00 PM
- بازدید :
59
- پاسخ :
1
|
تاریخ :
1403/12/30
- ساعت :
06:52:00 PM
- بازدید :
48
- پاسخ :
1
|
تاریخ :
1399/06/04
- ساعت :
02:25:00 PM
- بازدید :
4419
- پاسخ :
2
|
تاریخ :
1403/11/30
- ساعت :
10:36:00 AM
- بازدید :
202
- پاسخ :
2
|