Система.Сеть.Безопасность.SqlMembershipProvider 'требует схемы базы данных, совместимой с версией схемы '1'


У меня есть БД SQL Server 2008 со многими таблицами, заполненными данными, и я использовал SQL Server Management Studio для создания дампа SQL с помощью мастера сценариев : задачи -> создание сценариев -> сценарий всех объектов в выбранной базе данных, а также выбор опции для сценария данных. Я обязательно изменил значение "Script for Server Version"на" SQL Server 2008". Затем я создал новую БД и запустил дамп SQL на новой БД, чтобы создать идентичную копию старой БД. Тогда я назначил разрешения для пользователя по умолчанию для новой БД. Затем я изменил строку подключения на моем ASP.NET приложение для использования новой БД. Но когда я запускаю его, он выдает следующее исключение -

            Server Error in '/myapp' Application.
            The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.
            Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            Exception Details: System.Configuration.Provider.ProviderException: The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.

            Source Error:

            An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

            Stack Trace:

            [ProviderException: The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.]
               System.Web.Util.SecUtility.CheckSchemaVersion(ProviderBase provider, SqlConnection connection, String[] features, String version, Int32& schemaVersionCheck) +1977772
               System.Web.Security.SqlMembershipProvider.CheckSchemaVersion(SqlConnection connection) +89
               System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +815
               System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +105
               System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved) +42
               System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +78
               System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +60
               System.Web.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgs e) +119
               System.Web.UI.WebControls.Login.AttemptLogin() +115
               System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +101
               System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
               System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +118
               System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +166
               System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
               System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
               System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
               System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
12 54

12 ответов:

Если вы действительно ничего не забыли (views, SP и т. д. так далее. так далее.), затем googling указывает, что "глупые" решения, такие как закрытие проекта и повторное открытие, перестройка или:

то, что на самом деле сделало трюк, проходило через ASP.NET утилита настройки (Visual Studio-в меню веб-сайта), перевод приложения в автономный режим, а затем обратно в интернет. Это на самом деле просто делает изменения в интернете.конфигурация (не совсем уверен, что изменение было). Так что после принятия это офлайн, я должен был загрузить веб.настройка для размещенного решения. Затем взял приложение обратно в интернет, переписал веб.конфиг и др.

может быть ответом.

Я нашел очень простой способ, просто вставьте эти данные в aspnet_SchemaVersions таблица

common              1   True
health monitoring   1   True
membership          1   True
personalization     1   True
profile             1   True
role manager        1   True

мне пришлось использовать несколько пробелов, чтобы выровнять данные, игнорировать пробелы

У меня была аналогичная проблема, и я смог ее решить, добавив значение по умолчанию в таблицу aspnet_SchemaVersions. Эти значения по умолчанию не были добавлены в БД, созданную с помощью Tasks - > Generate Scripts.

вот полезное post

INSERT INTO dbo.aspnet_SchemaVersions 
VALUES
('common', 1, 1),
('membership', 1, 1),
('role manager', 1, 1);
GO

перезапуск пула приложений работал для меня

Я вовсе не SQL или ASP.net гуру или программист, получил работу случайно, но у меня была та же проблема и ошибка была глупой:

в своем Web.Conf строки подключения обычно выглядят примерно так:

<add name="AgriConnectionString" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=AgriBranch; pooling=true; Connection Timeout=120; Integrated Security=false;Persist Security Info=True; User ID=UserID; Password=PASS***WORD" providerName="System.Data.SqlClient" />

но вчера у меня случайно был мой источник, выглядящий так "Data Source=./SQLEXPRESS".

и я получил ту же ошибку, что и обсуждалось.

эта ошибка также объясняет, почему при переходе на сайт в автономном режиме и обратно в интернете с помощью Visual Утилита Studio или при перекомпиляции она исправит ошибку.

попробуйте обновить файл web config с правильной версией системы.Сеть.Безопасность.SqlRoleProvider

вы можете найти ниже конфигурации в c:/windows/microsoft.net/framework/v4.0.30319 или любая другая версия, там вы можете найти файл конфигурации . В него проверьте файлы конфигурации машины чтобы получить версию и открытый ключ.

для .net frameowork 4.0

     <roleManager enabled="true" defaultProvider="SqlProvider">
     <providers>
        <clear/>
        <add name="SqlProvider" connectionStringName="rolesDB" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
     </providers>
  </roleManager>

для .net framework 2.0

    <roleManager enabled="true" defaultProvider="SqlProvider">
     <providers>
        <clear/>
        <add name="SqlProvider" connectionStringName="rolesDB" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
     </providers>
  </roleManager>

возможно, Вам придется запустить aspnet_regsql.exe для того, чтобы получить ваши значения схемы заполнены. Вы можете жестко кодировать значения, а также до тех пор, пока у вас есть все сгенерированные объекты (таблицы, представления, sproc и т. д..

шаги, которые я предпринял, чтобы решить эту проблему, которая работала:

повторно запустить aspnet_regsql.исполняемый обеспечить значения по умолчанию, где есть перезапустил IIS.

тогда это сработало..

но если вы просто копируете схему базы данных без значений, вам нужно чтобы запустить 'aspnet_regsql.exe-файла для заполнения значений по умолчанию.

файл можно найти здесь (re: msdn): [диск:]\%windir%\Microsoft. NET\Framework\version (это в 2.0 dir)

и вот некоторые info:
http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx

в моем случае ни одно из вышеперечисленных решений не сработало.

Я удалил applicationName="/ " из поставщика memnership в webconfig, который был создан visual studio, а затем загрузил его на сервер.

или вы можете вручную создать строку приложения в таблице aspnet_Applications.

приятного кодинга!

Я пробовал многие из вариантов выше, но ни один из них, казалось, решить эту проблему в то время (хотя они мая помогли, и я этого не понял).

последний шаг, который я сделал [который работал], предоставлял пользователю SQL в моей строке подключения доступ к ролям aspnet_*, установленным aspnet_regsql.исполняемый. Мой пользователь SQL был настроен как db_owner в базе данных, но не был системным администратором в поле - не уверен, что это имеет значение.

Как только я это сделал, и после Я уже пробовал некоторые из вариантов выше, все работало отлично.

Я впервые получил эту ошибку после того, как забыл запустить aspreg_sql на моей новой БД. После этого я получил эту ошибку, пока я не закрыл Кассини или ASP.NET сервер разработки. Повторный запуск, и он работал нормально.

Это в основном происходит, когда вы копируете/мимо полного решения веб-сайта. ASP.NET конфигурация для SQL server должна быть настроена отдельно. Это означает, что вы должны запустить aspnet_regsql из командной строки Visual Studio и следовать инструкциям соответственно во время работы мастера.

старый пост, но у меня есть альтернативное решение.

мои строки подключения в web.config входит Persist Security Info=True; в них. Удаление этого решило ошибку.