堆栈跟踪信息:
[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
[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
{
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
Session["username"]=myDataReader["username"].ToString();
Session["rights"]=myDataReader["schright"].ToString();
你可以去掉这2句话看看
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
{
}
原因 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
}
}
}
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();
}