C# 登录页面 之前用了一年半都没错,最近报错了
这个项目是前人留下的,webform的,之前在客户那边用了一年半也完全没问题,最近发现登录不上去。输入了账户名和密码,单击登录后报错。
下面这个是登录button
<INPUT type="submit" id="Submit1" name="Submit1" value=" " runat="server" onserverclick="Submit1_ServerClick" style="border-style:none; background: url(images/登录.png); width: 66px; height: 26px; margin-top: 0px;">
下面这个Submit1_ServerClick
protected void Submit1_ServerClick(object sender, System.EventArgs e)
{
if (!Page.IsValid) return;
string sql = "exec spLogon @LogonName,@LogonPwd";
SqlParameter[] parameters ={
new SqlParameter("@LogonName", SqlDbType.NVarChar,15),
new SqlParameter("@LogonPwd", SqlDbType.NVarChar,20)};
parameters[0].Value = LogonID.Text.Trim();
parameters[1].Value = Password.Text;
SqlDataReader dr = null;
try
{
dr = DbHelperSQL.ExecuteReader(sql,parameters);
if (dr.Read())
{
int id=Convert.ToInt32(dr[0]);
TorionRole role = (TorionRole)Convert.ToInt32(dr[1]);
string realname = dr[2].ToString();
var user = new TorionUser(){ID=id,Role = role,RealName=realname};
Session["TorionHR:CurrentUser"] = user;
//write cookies to client
Response.Cookies["CookiesUser"].Value = Server.UrlEncode(LogonID.Text.Trim());
Response.Cookies["CookiesUser"].Expires = DateTime.Today.AddDays(1d);
FormsAuthentication.RedirectFromLoginPage("*", false);
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "faillogon", JScript.Alert("账号或密码不正确,请重新登录。"));
}
}
finally
{
dr.Close();
}
}
下面是错误信息
“/Cynthia”应用程序中的服务器错误。
________________________________________
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
Cynthia.WEB.Logon.Submit1_ServerClick(Object sender, EventArgs e) +672
System.Web.UI.HtmlControls.HtmlInputButton.OnServerClick(EventArgs e) +105
System.Web.UI.HtmlControls.HtmlInputButton.RaisePostBackEvent(String eventArgument) +106
System.Web.UI.HtmlControls.HtmlInputButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5087
________________________________________
版本信息: Microsoft .NET Framework 版本:2.0.50727.1891; ASP.NET 版本:2.0.50727.1879
这到底是错在什么地方了呢?? .net framework 版本问题?? c# ?登录
[解决办法]
楼上的方案试一下,我觉得可能性有80%
简单的处理方法:
让对方 用企业管理器打开数据库,不能够连接,就是正解
如果连接上了,就要看的DbHelperSQL 内部的编写
[解决办法]
目测应该是数据库里面的东西变了
TorionRole role = (TorionRole)Convert.ToInt32(dr[1]);
应该是这个没有查询到吧,
还有 这个TorionRole 应该是一个实体类,怎么一个int就转换了? 不解
[解决办法]
用客户的电脑远程连接数据库,
1.看看能否正常登陆数据库
2.看看存储过程spLogon是否能正常运行。是否有人修改了这个存储过程
[解决办法]
感觉4楼说的有道理,很有可能是360把数据库的一些配置改了
[解决办法]
估计是跟新补丁了造成1433端口拒绝访问或者被其他进程使用造成的,运行netstat -an看看1433端口是否在监听
[解决办法]
Cynthia.WEB.Logon.Submit1_ServerClick(Object sender, EventArgs e) +672
看看672行是哪行
[解决办法]
估计是360把SQL服务停了,我遇到过这种情况
[解决办法]
1.存储过程是否找到啊
2.加个catch捕获一下异常
------解决方案--------------------
Response.Cookies["CookiesUser"]是否存在,这里是最大可能出现Null的,因为你直接访问了它的属性。
[解决办法]
楼上说的是的 cookies被清除了 。
//write cookies to client
Response.Cookies["CookiesUser"].Value = Server.UrlEncode(LogonID.Text.Trim());
Response.Cookies["CookiesUser"].Expires = DateTime.Today.AddDays(1d);
这里可能会出问题。
加个判断
if( Request.Cookies["CookiesUser"]!==null)
{
//write cookies to client
Response.Cookies["CookiesUser"].Value = Server.UrlEncode(LogonID.Text.Trim());
Response.Cookies["CookiesUser"].Expires = DateTime.Today.AddDays(1d);
}
[解决办法]
支持4楼,应该是连不上数据库了,按webconfig配置,用udl测试一下吧,看能否连接成功。