Для "System.Web.Security.SqlMembershipProvider" требуется схема базы данных, совместимая с версией схемы "1",

У меня есть база данных SQL Server 2008 с множеством таблиц, заполненных данными, и я использовал SQL Server Management Studio для создания дампа SQL с помощью мастера Script: Задачи → Сгенерировать скрипты → Script Все объекты в выбранной базы данных, а также выбор опции Script Данные. Я обязательно изменил значение "Script для версии сервера" на "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

Ответ 1

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

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

Может быть, ответ.

Ответ 2

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

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

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

Ответ 3

У меня была аналогичная проблема, и я смог ее решить, добавив значение по умолчанию в таблицу aspnet_SchemaVersions. Эти значения по умолчанию не были добавлены в базу данных, созданную с помощью Задачи → Сгенерировать скрипты.

Здесь полезно сообщение

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

Ответ 4

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

Ответ 5

Я вообще не являюсь гуру или программистом 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 или при перекомпиляции она исправляет ошибку.

Ответ 6

Попробуйте обновить файл веб-конфигурации с помощью правильной версии System.Web.Security.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>

Ответ 7

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

Действия, которые я предпринял для решения этой проблемы, были:

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

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

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

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

и здесь информация:
http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx

Ответ 8

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

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

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

Хорошее кодирование!

Ответ 9

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

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

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

Ответ 10

Я впервые получил эту ошибку, забыв запустить aspreg_sql в моем новом db. После этого я получил эту ошибку, пока не отключу Cassini или сервер разработки ASP.NET. Re-ran, и он работал нормально.

Ответ 11

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

Ответ 12

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

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