Question

J'utilise ASP.NET Membership. Je l'exécuter sur un site d'hébergement partagé où j'ai un schéma db je lance les choses au large. Dans les scripts pour générer la base de données sur le serveur j'ai changé le schéma de « dbo » à cet autre schéma; sur les tables, vues et SPs. travail belle chose, avec tout sauf les membres; Je suis en mesure de contacter la DB et tirer vers le haut des dossiers.

Cependant, les membres-connexion échoue avec le message: « Impossible de trouver la procédure stockée « dbo.aspnet_CheckSchemaVersion ». » Bien sûr, cela est appelé « DBxx.aspnet_CheckSchemaVersion » dans ma base de données. Où est-ce appelé et comment puis-je faire appeler le schéma correct?

Était-ce utile?

La solution

Il est appelé à System.Web.Util.SecUtility et il est codé en dur. Sauf si vous voulez réinventer la roue vous devez réapprovisionner votre base de données. Je l'ai fait. Est-ce pas la chirurgie du cerveau, mais est beaucoup de travail et l'intérêt de base de données ne séparer sont pas admissibles dans mon livre.

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;
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top