关于用户登录异常的处理,请高手指点!

qinamao 2003-04-05 04:39:56
我的登录处理代码如下:
string username=uname.Text;
string userpwd=upwd.Text;
string logsql ="select * from users where username='"+username+"' and userpwd='"+userpwd+"'";
con.open();//打开数据库连接
try
{
SqlDataReader myDataReader;
SqlCommand myCommand = new SqlCommand( logsql,con.link);
myDataReader = myCommand.ExecuteReader();
while(myDataReader.Read())
{
Session["username"]=myDataReader["username"].ToString();
Session["rights"]=myDataReader["schright"].ToString();
}
myDataReader.Close();
}
catch
{
Response.Redirect("index.aspx");
} }

con.link.Close();//关闭数据库


在出现username或userpwd的值与数据库中内容不符时,
出现如下异常信息:
“----------------------------------
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
--------------------”

我想用异常处理,但是不知用于何处,将处理什么异常?

上述程序如何做修改?
...全文
155 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdshelf 2003-04-07
  • 打赏
  • 举报
回复
原因 1。

你的 Connection 对象 con 使用的帐号数据是否也来自 uname.Text 和 upwd.Text,如果是,当提供的用户名和密码不对的时候, con 肯定要出问题。


原因 2。

当你在 try...catch 中使用 Redirect 的时候,系统会抛出一个 ThreadAbortException 异常,你需要捕获这个异常。在代码中加这样一段

try
{
SqlDataReader myDataReader;
SqlCommand myCommand = new SqlCommand( logsql,con.link);
myDataReader = myCommand.ExecuteReader();
while(myDataReader.Read())
{
Session["username"]=myDataReader["username"].ToString();
Session["rights"]=myDataReader["schright"].ToString();
}
myDataReader.Close();
}
catch
{
try
{
Response.Redirect("index.aspx");
}
catch(ThreadAbortException)
{
//ignore
}
}
}

zwp315 2003-04-07
  • 打赏
  • 举报
回复
一般的用户登陆,当登陆成功的时候,才给session付值。
if(mesg=="ok")
{

Session["username"]=myDataReader["username"].ToString();
Session["rights"]=myDataReader["schright"].ToString();

}

这是我的代码:没有出现异常
string name=this.user.Text.ToString().Trim();
string psd=this.psw.Text.ToString().Trim();
string conn=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\mydba.mdb;";
string sql="select * from login where name='"+name+"'and password='"+psd+"'";
OleDbConnection oleconn=new OleDbConnection(conn);
oleconn.Open();
try
{
OleDbDataReader myDataReader;
OleDbCommand cmd=new OleDbCommand(sql,oleconn);
myDataReader = cmd.ExecuteReader();
while(myDataReader.Read())
{

}
}
catch
{

}
zwp315 2003-04-07
  • 打赏
  • 举报
回复
问题是不是出在
Session["username"]=myDataReader["username"].ToString();
Session["rights"]=myDataReader["schright"].ToString();
你可以去掉这2句话看看
csdnshao 2003-04-07
  • 打赏
  • 举报
回复
mark
fxmpch 2003-04-07
  • 打赏
  • 举报
回复
up
saucer 2003-04-07
  • 打赏
  • 举报
回复
1. 试试

bool bLoginOK = false;

try
{
SqlDataReader myDataReader;
SqlCommand myCommand = new SqlCommand( logsql,con.link);
myDataReader = myCommand.ExecuteReader();

if(myDataReader.Read())
{
Session["username"]=myDataReader["username"].ToString();
Session["rights"]=myDataReader["schright"].ToString();
bLoginOK = true;
}

myDataReader.Close();
}
catch (Exception ex)
{
Response.Write("Something is wrong:" + ex.Message);
}
finally
{
con.link.Close();
}

if (!bLoginOK)
Response.Redirect("index.aspx");


2.
为什么一会儿,
con.open();
而另一个地方却
con.link.Close();
?

3. 你验证的方法很不好,参看
Don't Require sa Permissions
http://msdn.microsoft.com/msdnmag/issues/02/09/SecurityTips/default.aspx
zwztu 2003-04-07
  • 打赏
  • 举报
回复
你的con在哪定义的?
qinamao 2003-04-07
  • 打赏
  • 举报
回复
谢谢诸位!按照saucer的方法,问题已经解决!
TO: saucer(思归, MS .NET MVP)
关于“2”:
open()是我在一个文件中定义的打开数据库连接的函数。
link是SqlConnection的一个对象。
原代码如下:

public void open()
{
string linkstr="server=localhost;uid=****;pwd=****;database=mydb"+";";
link=new SqlConnection(linkstr);
link.Open();
}
qinamao 2003-04-05
  • 打赏
  • 举报
回复
没人会吗?
qinamao 2003-04-05
  • 打赏
  • 举报
回复
堆栈跟踪信息:
[NullReferenceException: 未将对象引用设置到对象的实例。]
jsj.sch.Page_Load(Object sender, EventArgs e)
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +29
System.Web.UI.Page.ProcessRequestMain() +724

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧