2

我有一个 ASP.Net 3.5 (C#) Web 应用程序,它使用 Sql Server 2008 作为其数据库。在那个数据库中是一个标准的用户表,其中包含用户名/密码列,我有一个简单的登录表单来验证用户。登录页面简单地查询表以匹配输入值的用户名/密码组合。如果用户输入有效的用户名/密码,它可以正常工作并继续进行,但是如果由于某种原因无效组合,它会引发错误,而不是简单地找不到匹配项。错误是:

System.Web 消息:引发了“System.Web.HttpUnhandledException”类型的异常。堆栈跟踪:在 System.Web.UI.Page.HandleError(Exception e) 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint ) 在 System.Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page.ProcessRequest(HttpContext context) 在 ASP.login_aspx.ProcessRequest(HttpContext context) 在 c:\Windows\Microsoft.NET\Framework64\v2 .0.50727\Temporary ASP.NET Files\root\55c40ade\918a8ce7\App_Web_xyhtxem7.17.cs:System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 处 System.Web.HttpApplication 的第 0 行。 ExecuteStep(IExecutionStep 步骤, Boolean& completedSynchronously)完成错误文本:System.Web.HttpUnhandledException:引发了“System.Web.HttpUnhandledException”类型的异常。---> System.Data.SqlClient.SqlException:由于启动用户实例的进程失败,无法生成 SQL Server 的用户实例。连接将被关闭。在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream , BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 在 System.

任何想法发生了什么?

4

4 回答 4

0

如果不匹配,则 sql 结果可能为 NULL。因此,您没有得到该方法的任何有效结果。如果你做这样的事情

SELECT * FROM xxx WHERE username = {0} and password = {1}

尝试

SELECT COUNT(*) FROM xxx WHERE username = {0} and password = {1}

然后你得到 int 值 0 或 >0 来验证。但是向我们展示代码以帮助更多指定。

于 2013-01-11T10:14:30.127 回答
0

这是一个猜测,因为您没有提供足够的信息来确定。

听起来您已经编写了自己的提供程序,或者正试图以某种方式规避它。

如果您无法登录,看起来代码会自动回退到您在 web.config 中仍有连接字符串的默认提供程序。可能是视觉工作室“有用”添加的默认连接字符串。这是一个 mdf,这是当 mdf 不存在时它抛出的错误。

该数据库显然不存在,并且由于该错误而失败。

因此,您可能需要摆脱 web.config 中的提供程序或修复您自己的提供程序或修复您验证用户的方式。

于 2013-01-11T10:27:51.183 回答
0

您正在使用会员提供程序正在尝试连接到 sql 服务器 - 我猜您很可能正在尝试通过提供数据库文件名来使用本地 sql express 实例。
在这种情况下,如果数据库不存在,提供者会尝试创建数据库,并且帐户(您的代码在其下运行)可能需要对该文件夹具有读/写权限。或者你甚至可能没有在你的机器上安装 sqlexpress 等。

我建议您检查连接字符串并尝试从那里调试 - 例如,尝试连接到该数据库(远程/本地)或创建该数据库(以及所需的架构)(如果不存在)。将连接字符串更改为常规连接字符串(而不是提供文件名)等等......

有关创建会员提供程序所需的数据库和模式的更多帮助,请参阅本文:http ://www.asp.net/web-forms/tutorials/security/membership/creating-the-membership-schema-in-sql-server -CS

于 2013-01-11T10:41:45.657 回答
0

我在这里发现了问题。我没有为我的应用程序使用(或至少尝试使用)任何成员资格提供程序,但我正在为我的登录页面使用内置的登录控件。我正在处理提交按钮 OnClick 事件,该事件工作正常并在有效凭据时重定向但在无效时不重定向,我相信这是问题的根源,因为 Login.Authenticate 事件被触发但未处理。通过重新编写代码并使用我自己的提交表单而不是登录控件,它工作得很好。

于 2013-01-14T09:31:33.840 回答