اذهب إلى المحتوى

السؤال

نشر

املك صفحة لتحرير بيانات المستعملين استعمل ما يقارب 8 او 9  من  DropDownList اقوم بتعبئتها مع تحميل الصفحة من قاعدة البيانات كل  DropDownList يتم تحميله من جدول منفصل من قاعدة البيانات على سبيل المثال 

 DropDownList1 من جدول المركبات 

 DropDownList2 من جدول الهويات 

الخ..

المشكلة ان الصفحة الان بطيئة جدا مع افتتاحها وبعض المحاولات لا تفتح ابد

هل يوجد حل لحل هذا المشكلة ؟كيف يمكن تسريع تحميل الداتا في DropDownList

نبذه من الكود:

 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

            string com = "select * from TCity ,  TColors ";
            SqlDataAdapter adpt = new SqlDataAdapter(com, con);
     
            DataTable dt = new DataTable();
            adpt.Fill(dt);
            con.Open();
            DropCity.DataSource = dt;
            DropCity.DataBind();     
            DropCity.DataTextField = "CityName";
            DropCity.DataValueField = "IdCity";
            DropCity.DataBind();
            if (GetdefaultValuesCity != "")
            {
                DropCity.Items.Insert(0, new ListItem(GetdefaultCity, GetdefaultValuesCity));
            }
       

            con.Close();


            con.Open();
            DropColors.DataSource = dt;
            DropColors.DataBind();
            DropColors.DataTextField = "ColorsName";
            DropColors.DataValueField = "IDColors";
            DropColors.DataBind();
            if (GetDefaultValuesColors != "")
            {
                DropColors.Items.Insert(0, new ListItem(GetDefaultColors, GetDefaultValuesColors));
            }

         
            con.Close();

الكود بشكل هذا تقريبا 8 او 9 متوفر منه

Recommended Posts

  • 1
نشر

لاحظ أن طريقة كتابة الاستعلام لديك فيها خطأ، حيث أن الاستعلام يقوم بدمج نتائج جدولين أو أكثر (جداء الأسطر) مما يؤدي لعمل جدول يحوي لكل سطر فيه ناتج تكرار كل سطر من أول جدول مع جميع أسطر الجدول الثاني (حجم بيانات ضخم و استعلام معقد..

string com = "select * from TCity ,  TColors ";
                            ^^^^^^^^^^^^^^^^   cartisan product

الحل لديك هو عمل استعلام منفصل لكل جدول و نشر بيانات الاستعلام في القائمة المناسبة.

  • يمكن للتبسيط:

اكتب stored procedure يأخذ اسم الجدول كوسيط ويجلب بيناته..

CREATE PROCEDURE getTableData @TableName Varchar(30) 
AS 
BEGIN 
 DECLARE @query
 set @query = 'SELECT  * FROM '+ @TableName 
 EXEC @query
END

--****************************************************

CREATE PROCEDURE getTableData

    @TableName varchar(30)
AS
    SELECT * FROM @TableName

--****************************************************

IF NOT EXISTS(SELECT * FROM sys.tables WHERE name = @tablename)
    RETURN

DECLARE @sql NVARCHAR(30)
SET @sql = 'SELECT * FROM ' + QUOTENAME(@tablename)
EXECUTE(@sql)

 

شرح المشكلة:

اقرأ فقرة الضم المتقاطع Cross Join من المقالة 

 

  • 0
نشر
بتاريخ On 12/24/2021 at 01:22 قال Wael Aljamal:

لاحظ أن طريقة كتابة الاستعلام لديك فيها خطأ، حيث أن الاستعلام يقوم بدمج نتائج جدولين أو أكثر (جداء الأسطر) مما يؤدي لعمل جدول يحوي لكل سطر فيه ناتج تكرار كل سطر من أول جدول مع جميع أسطر الجدول الثاني (حجم بيانات ضخم و استعلام معقد..


string com = "select * from TCity ,  TColors ";
                            ^^^^^^^^^^^^^^^^   cartisan product

الحل لديك هو عمل استعلام منفصل لكل جدول و نشر بيانات الاستعلام في القائمة المناسبة.

  • يمكن للتبسيط:

اكتب stored procedure يأخذ اسم الجدول كوسيط ويجلب بيناته..


CREATE PROCEDURE getTableData @TableName Varchar(30) 
AS 
BEGIN 
 DECLARE @query
 set @query = 'SELECT  * FROM '+ @TableName 
 EXEC @query
END

--****************************************************

CREATE PROCEDURE getTableData

    @TableName varchar(30)
AS
    SELECT * FROM @TableName

--****************************************************

IF NOT EXISTS(SELECT * FROM sys.tables WHERE name = @tablename)
    RETURN

DECLARE @sql NVARCHAR(30)
SET @sql = 'SELECT * FROM ' + QUOTENAME(@tablename)
EXECUTE(@sql)

 

شرح المشكلة:

اقرأ فقرة الضم المتقاطع Cross Join من المقالة 

 

شكرا لك اخي الكريم

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

كل الشكر لك اخي الكريم واعتذر على تاخر ردي

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...