الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خطا بالادخال cmd.ExecuteNonQuery

بدأه Eng_Ranya في 10 فبراير 2011 · 34 رد · 3,463 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انشات جدول

table

column1 username

column2 email

column3 phone

وجعلت phone

unique ley

ثم عند ادخال البيانات الى الجدول عن طريق

textbox

String sql = "insert into users(username,email,phone) values ('" + Txtname.Text.ToString() + "','" + Txtmail.Text.ToString() + "','" + Txtphone.Text.ToString() + "')";
SqlCommand cmd = new SqlCommand(sql, con);

ولكن يحث هذا الخطا

Violation of UNIQUE KEY constraint 'IX_users'. Cannot insert duplicate key in object 'dbo.users'.

The statement has been terminated.

Line 85: cmd.ExecuteNonQuery();

ارجوكم المساعدة

ماذا ينقص هذا الكود

تم تعديل هذه المشاركة بواسطة X-File في 10 فبراير 2011 في 04:08

#2

عملية ادخال متضاربة

اي انت تقوم بادخال نفس البيانات اكثر من مرة على الحقل phone

In bad state

#3

ممممممممممممممممم .... تأكدي من العلاقات والمفاتيح (رئيسي وخارجية )

ملاحظة : لا حاجة لاستخدام ToString أنت بالاساس تقومين بإدخال نص

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#4

كيف اظهر رسالة خطا للمستخدم عند ادخال قيمة مكررة

رسالة بمعنى ان هذا الرقم موجود بالفعل

#5

اما من خلال استخدام try............catch

او من خلال وضع استعلام يبحث عن القيمة المراد ادراجها فلو كانت موجودة يعيد رسالة ولا يضيف ولا يضيف لقاعدة البيانات

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#6

لو تسمح الكود

#7

هنا مثال عن try... catch

الرابط الخاص بي

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#8

sorry

احتاج الى كود اظهار رسالة خطا لو المدخل موجود بالفعل

#9

طيب اكتبي استعلام select يجلب لك القيم المدخلة لقاعدة البيانات قبل اجراء عملية insert ............ فلو تم اعادة القيم بنجاح ... تكون القيم مكررة وموجودة مسبقا وإلا القيم غير موجودة وسأبسط لك ذلك بالشرح من خلال شبه كود

ضعي سلسلة الاتصال بقاعدة البيانات وكل مستلزمات اجراء عملية الاتصال//
select Id , name from Users where ID=value1 and name = value2;
sqlcommand cmd = new sqlcommand();
object Obj = cmd.execute...;
if(Obj == null)
{
هنا قومي بعملية الادخال من خلال تنفيذ استعلام insert
}
else
{
اعرضي هنا رسالة أن البيانات المدخلة موجودة مسبقا من خلال label أو من خلال alert
}
2

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#10

شكرااااااااااااااااا لك

تمت بنجاح

#11

أهلا وسهلا أخت رانيا :blush: :blush:

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#12

للاسف طلعت مشكلة

 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["testcon"].ToString());
        String sql1="select adslphone from users where phone='"+ txtpho.Text +"'";
        SqlCommand cmd1 = new SqlCommand(sql1,con);
        con.Open();
        Object obj = cmd1.ExecuteNonQuery();

        if (obj==null)
        {

            String sql = "insert into users(username,email,phone)values ('" + Txtname.Text.ToString() + "','" + Txtmail.Text.ToString() + "','" + Txtphone.Text.ToString() + "')";
            SqlCommand cmd = new SqlCommand(sql, con);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            Response.Redirect("Default.aspx");


        }
        else 
        {
            MessageBox1("Phone is Already Exist..Please Enter Another Number");



 }

الرسالة اللى بتطلع هى اللى بعد else

مهما كان الرقم موجود او غير موجود بالداتا بيز

تم تعديل هذه المشاركة بواسطة Eng_Ranya في 13 فبراير 2011 في 20:01

#13

أولا يوجد قوس مجموعة ناقص بعد else ...............

ثانيا لايوجد شيء اسمه messeageBox في سي شارب وإنما هو مكوجد في الفي بي ......... استخدمي

        Response.Write("Alert('Doublocated')");

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#14

مفيش حاجة ناقصة اناكدت تانى ووضعت القوس لانى نسيت انسخه

وبالنسبة للرسالة

private void MessageBox1(string msg)
    {
        System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label();
        lbl.Text = "<script language='javascript'>" + Environment.NewLine + "window.alert('" + msg + "')</script>";
        Page.Controls.Add(lbl);
    }

بتظهر الرسالة اللى بعد else فقط

لكن لو كان الرقم غير موجود فى الداتا بيز لا يحول الى الصفحة الرئيسية ويظهر نفس الرسالة

#15

ممكن تكتي رسالة الخطأ ........................

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#16

السلام عليكم ورحمه الله وبركاته

مهندسه رانيا يرجى التعديل

if(obj!=0)

جربيها

.:: Wish to become better and better ::.

#17

Tammam_KD

مفيش رسالة خطا لكن لو كان الرقم موجود فى الداتا بيز بيطلعلى رسالة انه موجود وده صح

لكن لو مش موجود بيطلع نفس الرسالة انه موجود برده

الاخ VB Helper

جربت اللى قلت عليه وطلعلى ايرور

Operator '!=' cannot be applied to operands of type 'object' and 'int'

#18

أختي الكريمة انظري الخطأ في الكود الخاص بك :

 Object obj = cmd1.ExecuteNonQuery();

انت تقومين بالبداية بتنفيذ استعلام select وتستخدمين ExecuteNonQuery ........... هذا خطأ فادح .........

ExecuteNonQuery تستخدم لتنفيذ استعلامات لا تعيد اي قيمة .............

ExecuteScaler تستخدم لتنفيذ استعلامات تعيد قيمة واحد ..........

ExecuteReader تستخدم لتنفيذ استعلامات تعيد أكثر من قيمة أو بعبارة أخرى جدول كامل .................

انت يتوجب عليك استخدام ExecuteScaler لاعادة قيمة واحد وهي adslphone إذا كانت موجودة أم لا

جربيها وادعيلي

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#19

اهلا رانيا كمال قال الاستاذ Tammam يمكنك ان تستخدمى Execute Scaler وتسترجعى بيها قيمة

ودا كود اخر يقوم بنفس المهمة

string sql="select  count (phone) from Users where phone=@phone";    
        SqlCommand cmd = new SqlCommand("select  count (phone) from Users where phone=@phone",yourconnectionstring);
        cmd.Parameters.AddWithValue("@phone",Textbox1.Text);
        yourconnectionstring.Open();
        bool value = int.Parse(cmd.ExecuteScalar().ToString()) == 1;
        yourconnectionstring.Close();
        if (value = true)
        {
طلع ايرور
        }
        else
        {
Sql insert 
        }

احنا عرفنا قيمة Bool يعنى بتاخد True or False

هنقارن القيمة اللى راجعه من ال SQL بال 1 ........ ولو ب true طلع الايرور

ولو False يبقى يعمل insert

وبكدا يبقى محدش يعرف يدخل رقم تليفون موجود قبل كدا

تم تعديل هذه المشاركة بواسطة shamy789 في 15 فبراير 2011 في 05:38

#20

الاخ Tammam_KD

لما جربت الطريقة بتاعتك طلع الايرو ده

Cannot convert method group 'ExecuteScalar' to non-delegate type 'object'. Did you intend to invoke the method?

object obj = cmd1.ExecuteScalar;

الاخ shamy789

جربت طريقتك ولكن طلعلى نفس المشكلة السابقة

نفذ جملة insert والرقم موجود بالفعل فى قاعدة البيانات

ولم يخرج رسالة الخطا

عكست true و false

طلعلى الايرور ولكن لو الرقم غير موجود بيطلع ايرور برده

انا هاتجننن :unsure:

#21

انا كمان هتجنن :blink:

بصى يا رانيا

ممكن تحطى الكود اللى كتباه فى البرنامج بالظبط هنا عشان نعرف بالظبط فين المشكلة

#22

:wacko: :wacko: ياريت الكود .......... العملية ليست بصعبة

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#23

اتفضل يا سيدى

protected void Button1_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["testycon"].ToString());
        String sql1 = "select count (phone) from users where phone=@phone";
        SqlCommand cmd1 = new SqlCommand(sql1,con);
        cmd1.Parameters.AddWithValue("@phone",txtpho.Text); 
                con.Open();
                object value = cmd1.ExecuteScalar;


        if (value==null)
        {
            con.Close();
            MessageBox1("Phone is Already Exist..Please Enter Another Number");           

        }
        else 
        {
            String sql = "insert into users(firstname,middlename,lastname,dateofbirth,phone,mobile1,mobile2,fax,email,password) values ('" + TxtFirstn.Text.ToString() + "','" + TxtMiddn.Text.ToString() + "','" + Txtlastn.Text.ToString() + "','" + Txtdate.Text.ToString() + "','" + Txtphone.Text.ToString() + "','" + Txtmob1.Text.ToString() + "','" + Txtmob2.Text.ToString() + "','" + Txtfax.Text.ToString() + "','" + Txtmail.Text.ToString() + "','" + Txtpass.Text.ToString() + "')";
            SqlCommand cmd = new SqlCommand(sql, con);

            cmd.ExecuteNonQuery();
            con.Close();
            MessageBox1("Thank You For Registration ");
            Response.Redirect("Default.aspx");



        }
    }




    private void MessageBox1(string msg)
    {
        System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label();
        lbl.Text = "<script language='javascript'>" + Environment.NewLine + "window.alert('" + msg + "')</script>";
        Page.Controls.Add(lbl);

  }

بص يا سيدى انا باعمل insert عادى لكن لما حبيت اضيف انه ميدخلش رقم تليفون مكرر وعملت الطريقة بتاعتك مبيعملش insert وبيطلع رسالة ال erro ان الرقم موجود ولما عكست الشرط بيدخل البيانات بس مبيطلعش رسالة خطا لو الرقم موجود

يعنى مبينفذش اى امر بعد else خاااااااااااااااااااااااااااااااااااالص

حاول تساعدنى عشان محتاجة الموضوع ده

..................................................................

معلش بقة شوفلى الموضوع ده وهاتعبك معايا واسالك سؤال تانى وتقولى ازاى اعمل صفحة بروفايل للمستخدم

انا عملت صفحة بروفايل واشتغلت معايا لكن لما ادخل بيانات التسجيل اخر بيانات اتسجلت بس هى اللى تظهر فى البروفايل

ناقص الكود بس اللى يعمل لوج ان هو اللى يظهر بياناته فى البروفايل

هاجيبلك الكود بتاع البروفايل بس لما نشوف الموضوع اللى جننى ده الاول :wacko: :blink: :unsure:

#24

رانيا عملت executeScalar بس فين القوسين بعدها

object value = cmd1.ExecuteScalar();

وهنا كمان :

ConfigurationManager.ConnectionStrings["testycon"].ToString()

اكتبي :

ConfigurationManager.ConnectionStrings["testycon"].ConnectionString

تم تعديل هذه المشاركة بواسطة Tammam_KD في 16 فبراير 2011 في 19:57

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#25

هاظبط الكود حالا وارد عليك اقولك النتيجة

استنى خليك معايا عشان باستنى ردك

ظبطت الكود وطلع العكس

نفذ جملة insert والرقم موجود فى الداتا بيز ومنفذش الخطا

ممكن تراجعلى فتح وغلق الاتصال

تم تعديل هذه المشاركة بواسطة Eng_Ranya في 16 فبراير 2011 في 20:09

مواضيع مشابهة