只是想学习asp.net 我能够登录并重定向到default.aspx。 我试图检查用户的usere名称和密码是否正确来自数据库(能够做到)。 现在我想在会话中存储用户名(无法做到,这里我得到nullpointer / value错误)并在下一页/重定向页面上将此会话值显示为欢迎消息。我的代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
SqlDataReader dr;
SqlConnection con = new SqlConnection("Data Source=xxxx-pc\\ddd;Initial Catalog=db_Login;User Id=sd;Password=ds;");
con.Open();
SqlCommand com = new SqlCommand("select password from tab_userinformation where Username='" + txt_uname.Text + "'", con);
dr = com.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
if (dr[0].ToString() == txt_pwd.Text)
{
Response.Redirect("default_Page.aspx");
//Response.Redirect("erp.htm");
Session["user"] = txt_uname.Text;
这里我得到的对象引用未设置为Session [“user”]
的对象异常的实例任何建议 谢谢!
答案 0 :(得分:5)
因为在为会话分配值之前,您正在重定向到另一个页面。
Response.Redirect("default_Page.aspx");
//Response.Redirect("erp.htm");
Session["user"] = txt_uname.Text; // this is not executing...
您必须在重定向到页面之前指定值。 e.g。
Session["user"] = txt_uname.Text; // this is not executing...
Response.Redirect("default_Page.aspx");
//Response.Redirect("erp.htm");
答案 1 :(得分:2)
在重定向之前将值存储在会话中:
Session["user"] = txt_uname.Text;
Response.Redirect("default_Page.aspx");
这样你就不会失去txtuname.Text的价值。
此外,您应该为SQL使用参数化查询 - 您目前拥有它的方式,您可以接受SQL注入攻击。
答案 2 :(得分:1)
检查:
答案 3 :(得分:0)
上面的代码应该是这样的:
if (dr[0].ToString() == txt_pwd.Text)
{
Session["user"] = txt_uname.Text;
Response.Redirect("default_Page.aspx");
这会奏效。一旦重定向到其他页面,控件就不会返回“redirec”之后的语句。因此他们没有被执行。而是“default_Page”的页面加载内的语句将开始执行
答案 4 :(得分:0)
Response.Redirect()之后的语句不会被执行,因为此(重定向)方法将用户转移到另一个页面。
建议:不要使用硬编码的sql字符串。使用参数化的sql语句或存储过程。
string password=string.Empty;
using(SqlConnection con = new SqlConnection("Data Source=xxxx-pc\\ddd;Initial Catalog=db_Login;User Id=sd;Password=ds;"))
{
using(SqlCommand com = new SqlCommand("select password from tab_userinformation where Username=@p1", con))
{
com.Parameters.AddWithValue("@p1",txt_uname.Text);
con.Open();
object retValue=com.ExecuteScalar();
if(retValue!=null)
{
password=retValue.ToString();
}
con.Close();
}
}
if (!string.IsNullOrEmpty(password))
{
if (password== txt_pwd.Text)
{
Session["user"] = txt_uname.Text;
Response.Redirect("default_Page.aspx");
}
}