Система.Сеть.Безопасность.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 ответов:
Если вы действительно ничего не забыли (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 сервер разработки. Повторный запуск, и он работал нормально.