لم يكن الاتصال خطأ مغلقًا لاختبار تحميل Visual Studio

StackOverflow https://stackoverflow.com/questions/19826729

سؤال

يتكون في صفحتي من مكرر وربط بعض البيانات باستخدام إجراء المتجر من SQL Server 2008.

rptTour.DataSource = GetData();
rptTour.DataBind();

ربط البيانات getData ()

SqlCommand cmdSelectAllMatch = new SqlCommand("sp_sel_Tour", Global.conn);
    SqlDataReader dtrSelectAllMatch = null;
    Collection<TourBO> TourData = new Collection<TourBO>();

    try
    {
        Global.connD2W.Open(); //error here, line 23
        cmdSelectAllMatch.CommandType = System.Data.CommandType.StoredProcedure;
        dtrSelectAllMatch = cmdSelectAllMatch.ExecuteReader();

        while (dtrSelectAllMatch.Read())
        {
            TourBO Tour = new TourBO();
            TourID = Convert.ToInt16(dtrSelectAllMatch[dtrSelectAllMatch.GetOrdinal("ID")]);
            Tour.Name = dtrSelectAllMatch[dtrSelectAllMatch.GetOrdinal("Name")].ToString();


            TourData.Add(Tour);
        }
    }
    catch(Exception ex)
    {
        Global.Log(ex.ToString());
    }
    finally
    {
        Global.connD2W.Close();            
    }

    if (dtrSelectAllMatch != null)
    {
        dtrSelectAllMatch.Close();
    }
    return TourData;

هذا هو SQLConnection الذي سيتم مشاركته بين التطبيق بأكمله.

public static SqlConnection connD2W = new SqlConnection(ConfigurationManager.ConnectionStrings["D2WConnectionString"].ConnectionString);

لقد قرأت فقط جميع البيانات من قارئ البيانات وتعيينها في مجموعة مخصصة والعودة إلى المكرر.

كل شيء يعمل بشكل جيد عندما أختبر بنفسي. ولكن عندما أقوم بتشغيل الاختبار المفقود باستخدام Visual Studio (20 مستخدمًا وأركض لمدة دقيقتين) ، تلقيت أخطاء أدناه في ملف سجل الخطأ الخاص بي (نفس الخطأ استمر في التكرار)

Log Entry : 9:59:05 AM Thursday, November 07, 2013
:System.InvalidOperationException: The connection was not closed. The connection's current state is connecting.
at System.Data.ProviderBase.DbConnectionBusy.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at TourDAL.GetAllScheduledMatch() in c:\Documents\Visual Studio 2010\WebSites\test\App_Code\DAL\TourDAL.cs:line 23

هل هذا يعني أن هذه الوظيفة لا تسمح للعديد من المستخدمين بالوصول إليها في نفس الوقت؟ بأي حال من الأحوال أن يحل هذا؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم اتصالًا عالميًا (على سبيل المثال ، تم تعريفه على أنه متغير عالمي أو متغير ثابت) ، فلن يعمل ذلك في بيئة يكون لديك فيها عدة مؤشرات ترابط في نفس الوقت (على سبيل المثال في خادم الويب).

السبب في ذلك هو أن جميع المواضيع سوف تمر من خلال نفس الرمز. أول واحد سيفتح الاتصال وسيظل مفتوحًا لجميع الآخرين أيضًا.

من الأفضل تحديد اتصال محليًا وفتح وإغلاقه بمجرد الانتهاء من المهمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top