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

البحث باستخدام الكلاس

بدأه alimr78 في 6 يناير 2012 · 7 رد · 646 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم هذه اول مشكاركة لي بالمنتدى وياريت اتحصل على مساعدة

أنا أفوم بعمل موقع صغير والسؤال هو اني عندي جدول في قواعد البيانات Products كما هو موضح بالاسفل

	[Productid] [int] IDENTITY(1,1) NOT NULL,
	[Productname] [varchar](50) NULL,
	[Descs] [varchar](50) NULL,
	[Quantity] [int] NULL,
	[amountvalue] [float] NULL,
	[productpendingamount] [float] NULL,
 CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED

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

public void showdproductetails (int a, string b, string c, int d, float e, float f)
    {


        string strc = ConfigurationManager.ConnectionStrings["Products"].ConnectionString;
        SqlConnection con = new SqlConnection(strc);
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "select Productname, Descs, Quantity, amountvalue, productpendingamount from Products where productid = @a";
        cmd.Parameters.AddWithValue("a", a);
        SqlDataReader rd = cmd.ExecuteReader();


        while (rd.Read())
        {

            b = rd.GetString(0);
            c = rd.GetString(1);
            d = rd.GetInt32(2);
            e = rd.GetFloat(3);
            f = rd.GetFloat(4);




        }

تم في الزر قمت بكتابة هذا الكود

Products objfind = new Products();

        objfind.showdproductetails(int.Parse(TextBox1.Text), TextBox2.Text, TextBox3.Text, int.Parse(TextBox4.Text), float.Parse(TextBox5.Text), float.Parse(TextBox6.Text));

ولكن للاسف لم يشتغل فرجاء لو سمحتو من لديه فكرة في تحسين الموضوع والكود ان يتكرم ولكم جزيل الشكر

#2

أخي الخطأ بالكود انك اصلا ما اسندت ناتج البحث للـ TextBoxs بل قمت بإرسالها كمتغيرات بينما يجب ان تسند ناتج البحث لمتغير ما كـ datatable مثلا وتسترجعها من الداله ثم تسند ناتج سجل الـ datatable للـ TextBoxs، يعني حاول تعدل الفكره بإنك لا تقوم بإسناد ناتج البحث بالداله showdproductetails بل دعها ترجع متغير يحتوي على السجل بالكامل "ممكن كما اسلفت ان يكون هذا المتغير datatable" ومن ثم قم بتعبئه ال TextBoxs .

لا تقدم لله ما يكره وتطلب منه ما تحب

#3

كلام الاخ tagh552 صحيح لذا غير الكود كمايلي :

public SqlDataReader showdproductetails (int a )
    {


        string strc = ConfigurationManager.ConnectionStrings["Products"].ConnectionString;
        SqlConnection con = new SqlConnection(strc);
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "select Productname, Descs, Quantity, amountvalue, productpendingamount from Products where productid = @a";
        cmd.Parameters.AddWithValue("a", a);
       return cmd.ExecuteReader();
}

		Products objfind = new Products();

       	var rd =  objfind.showdproductetails(int.Parse(TextBox1.Text))

		while (rd.Read())
        {

           TextBox2.Text = rd.GetString(0);
            TextBox3.Text = rd.GetString(1);
            TextBox4.Text = rd.GetInt32(2);
            TextBox5.Text = rd.GetFloat(3);
            TextBox6.Text = rd.GetFloat(4);




        }

وايضا هكذا افضل من ناحية فصل الطبقات بحيث يمكنك طلب showdproductetails في اي جزء من البرنامج دون الاعتماد على TextBox معين

#4

مرحبا شكرا لكم على التفاعل

بالنسبة للكود للاسف لا يعمل في البداية بمجرد أن قمت بلصق الكود في زر البحث جاءتني هذه الرسالة

بالنسبة للـ

TextBox4.Text = rd.GetInt32(2);
            TextBox5.Text = rd.GetFloat(3);
            TextBox6.Text = rd.GetFloat(4);

فإن الرسالة هي

Error	11	Cannot implicitly convert type 'int' to 'string'

ونفس الشيء مع float

قمت بالتغيير التي

                Products objfind = new Products();

                var rd = objfind.showdproductetails(int.Parse(TextBox1.Text));

                while (rd.Read())
                {

                    TextBox2.Text = rd[0].ToString();
                    TextBox3.Text = rd[1].ToString();
                    TextBox3.Text = rd[2].ToString();
                    TextBox4.Text = rd[3].ToString();
                    TextBox5.Text = rd[4].ToString();
                    TextBox6.Text = rd[5].ToString();




                }

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

010712020101pkdajn1xhzbmdr1.png

#6

المعذرة فقد اتعبتكم معي

فعلا لقد نسيت ان اعمل connectionstring لاني قمت باعادة المشروع من جديد ولكن بعد عمل ConnectionString واجهتني هده المشكلة

There is already an open DataReader associated with this Command which must be closed first.
#7

اخي رسالة الخطأ تشير بأن ال DataReader التي قمتها بتنفيذها واسترجاع قيمتها للدألة showdproductetails الـ"cmd" لم تقم بإغلاقها ،،، لذلك قم بإسناد قيمة ال query إلى متغير أخر ومن ثم ارجعه واقفل الـ connection بنفس الداله .

تعديل البرمجه عليك :)

لا تقدم لله ما يكره وتطلب منه ما تحب

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