PDA

View Full Version : سوال: متوقف شدن عملیات جاری هنگام رخ دادن خطا در کلاسی غیر از کلاس جاری



heivin
چهارشنبه 01 مهر 1388, 00:15 صبح
یه دکمه برای درج یک رکورد دارم که در رویداد کلیکش این کدهارو نوشتم:

myKol.InsKol(Convert.ToInt32(txtCode.Text.Trim()), cmbType.Text.Trim(), txtName.Text.Trim());
MessageBox.Show("حساب کل با موفقیت ثبت گردید", "اطلاع رسانی",
MessageBoxButtons.OK,MessageBoxIcon.Information);
myKol.InsKol() به این صورته:

internal void InsKol(int Code, string Type, string Name)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "InsKol";
cmd.Parameters.AddWithValue("@Code", Code);
cmd.Parameters.AddWithValue("@Type", Type);
cmd.Parameters.AddWithValue("@Name", Name);
dbRun myDbRun = new dbRun();
myDbRun.ExecCommand(cmd);
}
myDbRun.ExecCommand(ConStr) هم به این صورته:

public void ExecCommand(SqlCommand mycmd)
{
try
{
mycmd.Connection = myCn;
if (myCn.State == ConnectionState.Closed)
myCn.Open();
try
{
mycmd.ExecuteNonQuery();
}
catch (SqlException sqle)
{
if (sqle.Number == 2627)
{
MessageBox.Show("قبلا ثبت گردیده است"+sqle.Message, "خطا", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}

else
MessageBox.Show("خطا در بانک اطلاعاتی1: " + sqle.Message, "خطا",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
myCn.Close();
myCn.Dispose();
}
catch (SqlException se)
{
MessageBox.Show("خطا در بانک اطلاعاتی2: " + se.Message, "خطا", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
حال اگه یک مقدار تکراری وارد بشه خطای شماره 2627 رخ خواهد داد.که اونو تو myDbRun.ExecCommand مدیریت کرده ام. مشکلم اینجاست که بعد از اینکه کاربر مقدار تکراری وارد کرد پیغام "قبلا ثبت گردیده است" نشون داده میشه و پشت سرش پیغام "حساب کل با موفقیت ثبت گردید". من میخوام بعد از رخ دادن خطا پیغام "حساب کل با موفقیت ثبت گردید" نشون داده نشه
تشکر

atryad
چهارشنبه 01 مهر 1388, 01:59 صبح
با سلام
دوست عزیز میتونی خروجی تابع public void ExecCommand یه bool بگیری که در صورت اینکه هر کدوم از try ها خطا پیدا کرد و به cash منتقل شد مقدار false رو برگردونه وبرای نشان دادن پیغام "حساب کل با موفقیت ثبت شد" خروجی تابع رو چک کنید

heivin
چهارشنبه 01 مهر 1388, 10:26 صبح
اما آیا این یک روش معمول و استانداردیه؟ یعنی این کار اصولیه؟

atryad
چهارشنبه 01 مهر 1388, 11:26 صبح
اما آیا این یک روش معمول و استانداردیه؟ یعنی این کار اصولیه؟
آره چرا استاندارد نیست
وقتی که تابع رو صدا میزنی خروجی اونو چک میکنی این اصل کار برنامه نویسی است
مثل اینکه شما از یه نفر بخوای که یه کار رو براتون انجام بده حالا اگه نتیجه کار براتون مهم باشه جواب رو بهتون برمی گردونی اگه هم که مهم نباشه جوابی بهتون بر نمی گردونه"به قول استادمون"