نقل قول: مشکل در اجرای حذف رکورد
ببین تو قسمت بالای کد های یه if اضافه کن
اینجوری
if(txtcode.text=="")
{
messabox.show("شما هیچ گزینه ای را انتخاب نکرده اید");
return;
}
نقل قول: مشکل در اجرای حذف رکورد
ممنون از جوابت
ولی textbox خالی نیست
منظورم اینه که مثلا کاربر میزنه کد 400 حذف بشه درحالی که تو پایگاه همچین کدی وجود نداره
برنامه من در این شرایط هم میگه حذف شد.
نقل قول: مشکل در اجرای حذف رکورد
خوب
قبلش یه دستور select بنویس بر اساس کد
اگه وجود داشت حذف بشه اگه هم وجود نداشت بنویسه چنین چیزی تو پایگاه وجود نداره یه چیزی مثل این
select * from libUser where ucode="+txtucode.Text.Trim();
نقل قول: مشکل در اجرای حذف رکورد
الان این کار رو کردم البته مطمئن نیستم همون جوری که مدنظر شما بود انجام دادم یا نه
ولی بازهم با این که کد وجود نداشت گفت حذف شد:متعجب:
البته قانع نمیشم که دستور delete نتونه تشخیص بده و نیاز به select باشه
من اینطوری نوشتم چون فکر کردم اگه select میتونه تشخیص بده پس میفهمه و قبل از delete میره تو exception که باید بگه "وجود نداره"
string sql1 = "select * from libUser where ucode=" + txtucode.Text.Trim();
string sql2 = "delete from libUser where ucode=" + txtucode.Text.Trim();
con1 = new SqlConnection(s);
cmd1 = new SqlCommand(sql1, con1);
cmd2 = new SqlCommand(sql2, con1);
con1.Open();
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
میشه بیشتر راهنمایی کنید
ممنون
نقل قول: مشکل در اجرای حذف رکورد
سلام.دوست عزیز شما اول چک کن ببین رکوردی با این ucode وجود داره بعد عملیات حذف را انجام بده
با کد زیر میتونی تعداد رکوردهایی که میخوایی را بدست بیاری بعد بگو اگه بیشتر از 1 بود بره سراغ عملیات حذف
private int count(string strsql)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application .StartupPath+"\\restoran.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = strsql;
int a=Convert.ToInt16(cmd.ExecuteScalar());
con.Close();
return a;
}
if (count("SELECT COUNT(*) FROM libUser WHERE ucode=" + txtucode.Text.Trim())>0)
}
// عملیات حذف
{
نقل قول: مشکل در اجرای حذف رکورد
سلام
یک توضیح مختصر در مورد متد ExecuteNonQuery مربوط به SqlCommand میدم و مشکل کد شما رو عرض میکنم.
این تابع از SqlCommand در عملیاتی مانند Delete تعداد سطرهایی رو که عمل حذف رو در اون انجام داده برگشت میده. و شما باید از این قابلیت SqlCommand استفاده بکنید.
1-اگر شما 2 تا رکورد داشته باشید که مثلا فیلد کد کاربری اونها با هم یکسان باشند(بر فرض مثال '123' بر حسب اتفاق) و شما با کوئری زیر اقدام به حذف رکوردهایی بکنید که کد کاربری اونها '123' باشه
"DELETE * From TableName WHERE ucode='123'"
متد ExecuteNonQuery هر دو رکورد موجود در جدول دیتابیس شما رو که فیلد کد کاربری اونها '123' هست رو حذف میکنه و عدد 2 رو برگشت میده.
2-اگر از کوئری زیر استفاده کنید.
"DELETE From TableName WHERE ucode='123'"
متد ExecuteNonQuery اولین رکورد از جدول دیتابیس شما رو که فیلد کد کاربری اون '123' هست رو حذف میکنه و عدد 1 رو برگشت میده.
3-اگر رکورد مورد نظر در دیتابیس وجود نداشته باشه عدد 0 رو برگشت میده.(بدون تولید خطا - یعنی کدها رو تا آخرانجام میده بدون اینکه رکوردی رو حذف بکنه و یا خطا تولید بکنه)
4-در غیر این صورت عدد -1 رو برگشت میده و یا اقدام به تولید خطا میکنه.
و اما ایراد کار شما:
با توجه به توضیحات بالا مشکل کد شما مربوط به توضیح شماره 3 میشه
بنابر این من برای رفع این مشکل کدهای شما رو به صورت زیر تغییر دادم.
private int Delete_User(string usercode)
{
int result = -1;
using(SqlConnection conn= new SqlConnection(s))
{
using(SqlCommand com = new SqlCommand("DELETE FROM libUser WHERE ucod=@ucode",conn))
{
com.Parameters.Add("@ucode", SqlDbType.NVarChar).Value = usercode;
try
{
conn.Open();
result = com.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show("خطا در حذف کاربر \n" + ex.Message);
result = -1;
}
}
}
return result;
}
private void button1_Click(object sender, EventArgs e)
{
DialogResult result;
result = MessageBox.Show("آیا مطمئن هستید که رکورد حذف شود", "",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning,MessageBoxDefaultButton.But ton2);
if (result == DialogResult.Yes)
{
int iResult = Delete_User(txtucode.Text.Trim());
if(iResult == 0)
{
MessageBox.Show("کاربری با کد مورد نظر تعریف نشده است");
}
else if (iResult >= 1)
{
MessageBox.Show("حذف کاربر(ان) با موفقیت انجام شد");
}
}
}
اگر لازم دیدید پیغام بدید تا خط به خط کدهای بالا رو توضیح بدم.
و در نهایت جند تا توصیه جهت خوانایی بهتر کدهای برنامه:
1- برای اقدام به انجام عملیاتی نظیر Insert,Update,Delete برای هر کدام یک تابع بنویسد
2- برای اقدام به انجام عملیاتی نظیر Select,Insert,Update,Delete از پارامترها در SqlCommand استفاده کنید.
3- برای اقدام به انجام عملیاتی نظیر Insert,Update,Delete کانکشن و یا ملزومات مورد نیاز برا کار با دیتابیس رو درون خود تابع تعریف کنید.
4- وقتی کارتون با جداول دیتابیس تمام شد Connection رو Close کنید.
موفق باشید.
یا حق