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

نام تاپیک: مشکل در اجرای حذف رکورد

  1. #1

    مشکل در اجرای حذف رکورد

    باسلام
    من کد حذف کاربر را در برنامه ام به این شکل نوشتم مشکلش اینست که وقتی کاربری وجود نداره بازهم پیغام میده"حذف با موفقیت انجام شد"
    به نظرتون منطق کدم مشکل داره؟

    //حذف کاربر......
    private void button1_Click(object sender, EventArgs e)
    {
    DialogResult result;
    result = MessageBox.Show("آیا مطمئن هستید که رکورد حذف شود", "",
    MessageBoxButtons.YesNo, MessageBoxIcon.Warning,MessageBoxDefaultButton.But ton2);
    if (result == DialogResult.Yes)
    {
    try
    {
    string sql1 = "delete from libUser where ucode="+txtucode.Text.Trim();
    con1 = new SqlConnection(s);
    cmd1 = new SqlCommand(sql1, con1);

    con1.Open();
    cmd1.ExecuteNonQuery();
    txtucode.Clear();

    MessageBox.Show("حذف با موفقیت انجام شد");
    }
    catch
    {
    MessageBox.Show("چنین کاربری موجود نیست");
    }
    }
    }

  2. #2
    کاربر دائمی آواتار kurdboy2175
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    سردشت
    سن
    30
    پست
    136

    نقل قول: مشکل در اجرای حذف رکورد

    ببین تو قسمت بالای کد های یه if اضافه کن
    اینجوری
    if(txtcode.text=="")

    {
    messabox.show("شما هیچ گزینه ای را انتخاب نکرده اید");
    return;
    }

  3. #3

    نقل قول: مشکل در اجرای حذف رکورد

    ممنون از جوابت
    ولی textbox خالی نیست
    منظورم اینه که مثلا کاربر میزنه کد 400 حذف بشه درحالی که تو پایگاه همچین کدی وجود نداره
    برنامه من در این شرایط هم میگه حذف شد.

  4. #4
    کاربر دائمی آواتار kurdboy2175
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    سردشت
    سن
    30
    پست
    136

    نقل قول: مشکل در اجرای حذف رکورد

    خوب
    قبلش یه دستور select بنویس بر اساس کد
    اگه وجود داشت حذف بشه اگه هم وجود نداشت بنویسه چنین چیزی تو پایگاه وجود نداره یه چیزی مثل این
    select * from libUser where ucode="+txtucode.Text.Trim();

  5. #5

    نقل قول: مشکل در اجرای حذف رکورد

    الان این کار رو کردم البته مطمئن نیستم همون جوری که مدنظر شما بود انجام دادم یا نه
    ولی بازهم با این که کد وجود نداشت گفت حذف شد

    البته قانع نمیشم که دستور 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();


    میشه بیشتر راهنمایی کنید
    ممنون

  6. #6
    کاربر دائمی آواتار mehrdad.ghorbaniyan
    تاریخ عضویت
    بهمن 1392
    محل زندگی
    اصفهان
    سن
    32
    پست
    137

    نقل قول: مشکل در اجرای حذف رکورد

    سلام.دوست عزیز شما اول چک کن ببین رکوردی با این 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)
    }
    // عملیات حذف
    {

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1391
    محل زندگی
    West Azarbaijan, Urmia
    پست
    71

    نقل قول: مشکل در اجرای حذف رکورد

    سلام

    یک توضیح مختصر در مورد متد 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 کنید.


    موفق باشید.

    یا حق
    آخرین ویرایش به وسیله rg_BlackRose : دوشنبه 01 اردیبهشت 1393 در 01:49 صبح

تاپیک های مشابه

  1. سوال: مشکل فقط در حذف رکورد ها از DataGrid
    نوشته شده توسط EbiPenMan در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: شنبه 24 اردیبهشت 1390, 19:38 عصر
  2. یک مشکل بزرگ برای حذف رکورد
    نوشته شده توسط evilboy در بخش برنامه نویسی در 6 VB
    پاسخ: 5
    آخرین پست: جمعه 31 فروردین 1386, 02:35 صبح
  3. مشکل در حذف رکورد
    نوشته شده توسط Asad.Safari در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: پنج شنبه 10 فروردین 1385, 13:36 عصر
  4. مشکل حذف رکورد از دیتا گرید
    نوشته شده توسط Mahdi Fahmideh در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 05 مرداد 1384, 11:02 صبح
  5. یه مشکل در حذف رکورد
    نوشته شده توسط Morteza Manafpour در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: پنج شنبه 22 اردیبهشت 1384, 14:27 عصر

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

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