سؤال

أنا أستخدم عضوية ASP.NET. أقوم بتشغيله على موقع استضافة مشترك حيث لدي مخطط DB الذي أدى فيه إلى تشغيل الأشياء. في البرامج النصية لتوليد DB على الخادم، قمت بتغيير المخطط من "DBO" إلى هذا المخطط الآخر؛ على الطاولات، وجهات النظر و SP. شيء يعمل بشكل جيد، مع كل شيء باستثناء العضوية؛ أنا قادر على الاتصال ب DB وسحب السجلات.

ومع ذلك، فشل تسجيل الدخول العضوية مع الرسالة: "تعذر العثور على الإجراء المخزن" dbo.aspnet_checkschemaveاني ". هذا بالطبع يسمى 'dbxx.aspnet_checkschemaversion' في قاعدة البيانات الخاصة بي. أين يتم استدعاء هذا من وكيف يمكنني إجراء استدعاء المخطط الصحيح؟

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

المحلول

يتم استدعاؤه في system.web.util.sectility وهو فائق. إلا إذا كنت تريد اعادة اختراع العجلة تحتاج إلى إعادة توفير قاعدة البيانات الخاصة بك. لقد انجزته. ليست جراحة الدماغ ولكن الكثير من العمل واهتمام فصل قاعدة بيانات غير مؤهلة في كتابي.

internal static void CheckSchemaVersion(ProviderBase provider, SqlConnection connection, string[] features, string version, ref int schemaVersionCheck)
{
    if (connection == null)
    {
        throw new ArgumentNullException("connection");
    }
    if (features == null)
    {
        throw new ArgumentNullException("features");
    }
    if (version == null)
    {
        throw new ArgumentNullException("version");
    }
    if (schemaVersionCheck == -1)
    {
        throw new ProviderException(SR.GetString("Provider_Schema_Version_Not_Match", new object[] { provider.ToString(), version }));
    }
    if (schemaVersionCheck == 0)
    {
        lock (provider)
        {
            if (schemaVersionCheck == -1)
            {
                throw new ProviderException(SR.GetString("Provider_Schema_Version_Not_Match", new object[] { provider.ToString(), version }));
            }
            if (schemaVersionCheck == 0)
            {
                SqlCommand command = null;
                SqlParameter parameter = null;
                foreach (string str in features)
                {
                    command = new SqlCommand("dbo.aspnet_CheckSchemaVersion", connection);
                    command.CommandType = CommandType.StoredProcedure;
                    parameter = new SqlParameter("@Feature", str);
                    command.Parameters.Add(parameter);
                    parameter = new SqlParameter("@CompatibleSchemaVersion", version);
                    command.Parameters.Add(parameter);
                    parameter = new SqlParameter("@ReturnValue", SqlDbType.Int);
                    parameter.Direction = ParameterDirection.ReturnValue;
                    command.Parameters.Add(parameter);
                    command.ExecuteNonQuery();
                    if (((parameter.Value != null) ? ((int) parameter.Value) : -1) != 0)
                    {
                        schemaVersionCheck = -1;
                        throw new ProviderException(SR.GetString("Provider_Schema_Version_Not_Match", new object[] { provider.ToString(), version }));
                    }
                }
                schemaVersionCheck = 1;
            }
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top