问题描述
今天做了个很简单的登录功能模块,用的是VS2010自带的登录注册修改密码控件。网页上没有别的功能,就只是几个页面,每个页面上放一个Login、CreateUserWizard或是ChangePassword控件,然后从主页可以跳转到有Login控件的登录页,或者到有注册控件的页面,登录或注册完就会跳转到主页。如果在VS里用“浏览器查看”可以成功的注册、登录,但如果放在IIS里在登录的时候就总会提示这样的错(我的IIS是5.1版的,但是用了.net4.0的功能):用户'2CBE3BECFCBB4A6ASPNET'登录失败。说明:执行当前Web请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.Data.SqlClient.SqlException:用户'2CBE3BECFCBB4A6ASPNET'登录失败。源错误:执行当前Web请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。堆栈跟踪:[SqlException(0x80131904):用户'2CBE3BECFCBB4A6ASPNET'登录失败。]System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception,BooleanbreakConnection)+5009598System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()+234System.Data.SqlClient.TdsParser.Run(RunBehaviorrunBehavior,SqlCommandcmdHandler,SqlDataReaderdataStream,BulkCopySimpleResultSetbulkCopyHandler,TdsParserStateObjectstateObj)+2275System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(BooleanenlistOK)+35System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo,StringnewPassword,BooleanignoreSniOpenTimeout,TimeoutTimertimeout,SqlConnectionowningObject)+183System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfoserverInfo,StringnewPassword,BooleanredirectedUserInstance,SqlConnectionowningObject,SqlConnectionStringconnectionOptions,TimeoutTimertimeout)+239System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnectionowningObject,TimeoutTimertimeout,SqlConnectionStringconnectionOptions,StringnewPassword,BooleanredirectedUserInstance)+195System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentityidentity,SqlConnectionStringconnectionOptions,ObjectproviderInfo,StringnewPassword,SqlConnectionowningObject,BooleanredirectedUserInstance)+232System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptionsoptions,ObjectpoolGroupProviderInfo,DbConnectionPoolpool,DbConnectionowningConnection)+185System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionowningConnection,DbConnectionPoolpool,DbConnectionOptionsoptions)+33System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionowningObject)+524System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionowningObject)+66System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnectionowningObject)+479System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnectionowningConnection)+108System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnectionouterConnection,DbConnectionFactoryconnectionFactory)+126System.Data.SqlClient.SqlConnection.Open()+125System.Web.DataAccess.SqlConnectionHolder.Open(HttpContextcontext,BooleanrevertImpersonate)+95System.Web.DataAccess.SqlConnectionHelper.GetConnection(StringconnectionString,BooleanrevertImpersonation)+206System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(Stringusername,BooleanupdateLastLoginActivityDate,Int32&status,String&password,Int32&passwordFormat,String&passwordSalt,Int32&failedPasswordAttemptCount,Int32&failedPasswordAnswerAttemptCount,Boolean&isApproved,DateTime&lastLoginDate,DateTime&lastActivityDate)+827System.Web.Security.SqlMembershipProvider.CheckPassword(Stringusername,Stringpassword,BooleanupdateLastLoginActivityDate,BooleanfailIfNotApproved,String&salt,Int32&passwordFormat)+105System.Web.Security.SqlMembershipProvider.ValidateUser(Stringusername,Stringpassword)+106System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgse)+60System.Web.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgse)+129System.Web.UI.WebControls.Login.AttemptLogin()+127System.Web.UI.WebControls.Login.OnBubbleEvent(Objectsource,EventArgse)+101System.Web.UI.Control.RaiseBubbleEvent(Objectsource,EventArgsargs)+37System.Web.UI.WebControls.Button.OnCommand(CommandEventArgse)+125System.Web.UI.WebControls.Button.RaisePostBackEvent(StringeventArgument)+167System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(StringeventArgument)+10System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandlersourceControl,StringeventArgument)+13System.Web.UI.Page.RaisePostBackEvent(NameValueCollectionpostData)+36System.Web.UI.Page.ProcessRequestMain(BooleanincludeStagesBeforeAsyncPoint,BooleanincludeStagesAfterAsyncPoint)+5563web.config文件内容,数据库一直用的是Windows验证,所以链接字段里也没有uid和pwd:<?xmlversion="1.0"?><configuration><connectionStrings><removename="LocalSqlServer"/><addname="LocalSqlServer"connectionString="DataSource=2CBE3BECFCBB4A6;InitialCatalog=myprovider;IntegratedSecurity=True"providerName="System.Data.SqlClient"/></connectionStrings><system.web><authenticationmode="Forms"><formsloginUrl="Login.aspx"name=".ASPXFORMSAUTH"></forms></authentication><compilationdebug="true"targetFramework="4.0"/></system.web></configuration>关于数据库的话,我是先在SQLServer里建了个叫myprovider的空数据库,再在VS里用“ASP.NETSQLServer安装向导”连过去的(就是用打开VS命令提示,输入aspnet_regsql.exe后出现的一个安装向导)。完成之后数据库里就出现了各种.net建立的表。后续的网页制作也都是在这个基础上的。另外报错的页面提到了个“2CBE3BECFCBB4A6ASPNET登录失败”,是不是有什么地方需要修改的但没有修改?我的SQLServer里没有叫ASPNET的数据库,搜遍了整个项目也没有“ASPNET”这样的信息。请问该怎么解决?
解决方案
解决方案二:
是iis默认的账号aspnet没有sqlserver的访问权限。你打开sqlservermanagestudio,把aspnet设置为sqlserver的可登录用户。或者打开iis,把应用程序池的标识设置成当前你自己的账户。
解决方案三:
引用1楼bwangel的回复:
是iis默认的账号aspnet没有sqlserver的访问权限。你打开sqlservermanagestudio,把aspnet设置为sqlserver的可登录用户。或者打开iis,把应用程序池的标识设置成当前你自己的账户。
您好,请问,您说把aspnet设置为sqlserver的可登录用户是说的下面这样的步骤吗?我这样做以后,错误页提示:异常详细信息:System.Data.SqlClient.SqlException:无法打开登录所请求的数据库"myprovider"。登录失败。用户'2CBE3BECFCBB4A6ASPNET'登录失败。源错误:执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。堆栈跟踪:[SqlException(0x80131904):无法打开登录所请求的数据库"myprovider"。登录失败。用户'2CBE3BECFCBB4A6ASPNET'登录失败。]即使在链接字段里加上uid和pwd也不行。然后您说的应用程序池,我用的iis5.1,说是没有这个功能……