我想把textbox里的password和数据库里的密码作对比,如果一致则能登陆,若不一致就不能登陆,texbox的ID是txtPasswd,sql数据库里存密码的列名叫passwd,可我用如下代码:
if(txtPasswd.Text.ToString() != dtrReader["passwd"].ToString())
      {
        Response.Write("密码错误");
        Response.Write(txtPasswd.Text);
        Response.Write(dtrReader["passwd"]);
      }
      else
      {
        Session["sesID"] = dtrReader["regID"].ToString();
            Response.Redirect("default.aspx");
不管怎么样都是显示密码错误,就算是和数据库里的密码一致,也是显示密码错误,请问这是为什么,应该怎么样改代码,谢谢!

解决方案 »

  1.   

    你Textbox里在生成页面时有内容吗?
      

  2.   

    if(txtPasswd.Text.ToString() != dtrReader["passwd"].ToString())
          {
            Response.Write("密码错误");
            Response.Write(txtPasswd.Text);
            Response.Write(dtrReader["passwd"]);
          }
          else
          {
            Session["sesID"] = dtrReader["regID"].ToString();
                   }//少了!!
     Response.Redirect("default.aspx");
      

  3.   

    错了,
    if(txtPasswd.Text.ToString() != dtrReader["passwd"].ToString())
          {
            Response.Write("密码错误");
            Response.Write(txtPasswd.Text);
            Response.Write(dtrReader["passwd"]);
          }
          else
          {
            Session["sesID"] = dtrReader["regID"].ToString();
               
     Response.Redirect("default.aspx");
        }//少了!!
      

  4.   

    调试跟踪一下,看看Textbox与取出来的值是否一样
      

  5.   

    if(txtPasswd.Text!=null && 
    txtPasswd.Text.ToString() == dtrReader["passwd"].ToString())
      

  6.   

    我先在textbox里填了2,而且数据库里的密码也就是2,可还是说密码有错,我用Response.Write分别输出了txtPasswd.Text和dtrReader["passwd"].ToString()显示的都是2,可他就是说两个数不一样,真是奇怪啊!
      

  7.   

    if(request.Form("txtPasswd") != dtrReader["passwd"].ToString())
      

  8.   

    if(txtPasswd.Text != dtrReader["passwd"].ToString())
      

  9.   

    还是不行啊,我把全部代码贴上来吧:<%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Page language="c#" Codebehind="Login.aspx.cs" AutoEventWireup="false" Inherits="BBSCS.Login" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>Login</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script Runat="Server">
      void Button_Click(Object Sender,EventArgs e)
      {
        SqlConnection conn;
        SqlCommand cmdLogin;
        SqlCommand cmdSelectCount;
        SqlDataReader dtrReader;
        
        conn = new SqlConnection(@"Server=localhost;UID=sa;PWD=chenpo2000;Database=testBBS");
        conn.Open();
        cmdLogin = new SqlCommand("Select * From regUser Where regName = " + "'" + txtName.Text + "'",conn);
        cmdSelectCount = new SqlCommand("Select Count(*) From regUser Where regName = " + "'" + txtName.Text + "'",conn);
        if(Int32.Parse(cmdSelectCount.ExecuteScalar().ToString()) != 0)
        {
          dtrReader = cmdLogin.ExecuteReader();
          dtrReader.Read();
          if(txtPasswd.Text != dtrReader["passwd"].ToString())
          {
            Response.Write("密码错误");
            Response.Write(txtPasswd.Text);
            Response.Write(dtrReader["passwd"]);
          }
          else
          {
            Session["sesID"] = dtrReader["regID"].ToString();
                Response.Redirect("default.aspx");
          }
          dtrReader.Close();
        }
        else
        {
          Response.Write("该用户未注册");
        }
        conn.Close();
      }
      
      void Button_Register(Object Sender,EventArgs e)
      {
        Response.Redirect("Register.aspx");
      }
    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form Runat="Server" ID="Form1">
    用户名:
    <asp:TextBox ID="txtName" Runat="Server" />
    <asp:RequiredFieldValidator ControlToValidate="txtName" Text="请输入用户名" Runat="Server" ID="Requiredfieldvalidator1" />
    <br>
    密 码:
    <asp:TextBox ID="txtPasswd" TextMode="Password" Runat="Server" />
    <asp:RequiredFieldValidator ControlToValidate="txtPasswd" Text="请输入密码" Runat="Server" ID="Requiredfieldvalidator2" />
    <br>
    <asp:Button Text="登录" OnClick="Button_Click" Runat="Server" ID="Button1" />
    <asp:Button Text="注册" OnClick="Button_Register" Runat="Server" ID="Button2" />
    </form>
    </body>
    </HTML>
      

  10.   

    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Page language="c#" Codebehind="Login.aspx.cs" AutoEventWireup="false" Inherits="BBSCS.Login" %>
    既然是CodeBehind,怎么还有
    <script Runat="Server">
      void Button_Click(Object Sender,EventArgs e)
      {
    ......????
      

  11.   

    你是用VS,照着书打的代码吧?
    <%@ Page language="c#" Codebehind="Login.aspx.cs" AutoEventWireup="false" Inherits="BBSCS.Login" %>
    把AutoEventWireup="false"
    改成true
    试试
      

  12.   

    为什么要取数据出来比较,多带一个条件不就可了吗?
    public DataReader test(username,password){
        ......
        select * from tableName where 用户名=username , 密码=password;
        ......
    }
    public void button_click(object b,EventArgs e){
        if(test(username,password)){
           .....
           code
           .....
        }
        else
           Response.Write("sorry.......");
    }
      

  13.   

    代码是没有问题的,主要在于你没有编译,代码写在前面也的进行编译的!具体编译没有做过,不过,你可以把你的代码放在vs.net开发环境里试下,然后编译运行,应该是没有错的!
      

  14.   

    if条件拆开了写试试
    DataReader 不要监视
      

  15.   

    我就是用VS.net写的代码,然后编译执行的,我觉得很奇怪啊,两个字符串明明一样,可他就是说不一致
      

  16.   

    sql数据库里存密码的列名叫passwd,它是不是char类型的,如果是的话,需要在toSring()后面把多余的字符去掉
      

  17.   

    后台代码是login.aspx.cs吧,如下:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace BBSCS
    {
    /// <summary>
    /// Login 的摘要说明。
    /// </summary>
    public class Login : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox txtName;
    protected System.Web.UI.WebControls.TextBox txtPasswd;
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.RequiredFieldValidator Requiredfieldvalidator1;
    protected System.Web.UI.WebControls.RequiredFieldValidator Requiredfieldvalidator2;
    protected System.Web.UI.WebControls.Button Button2;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  18.   

    DanielQQ(),请问怎么样把后面多余的字符去掉?谢谢
      

  19.   

    dtrReader["passwd"].ToString().TrimEnd()就行了
      

  20.   

    果然有效,谢谢大家了,但请问一下为什么是char类型的就要用TrimEnd()去掉后面的字符呢,实际上并没有多余的字符啊?
      

  21.   

    数据类型char表示的是固定长度,而varchar表示的是实际长度的数据类型,比如:如果是char类型,当你输入字符小于长度时,后补空格;而是varchar类型时,则表示你输入字符的实际长度。
      

  22.   

    你要在Page_load()里面添加如下代码:
         if (!IsPostBack)
           {
              Page.DataBind();
           }
    因为你在提交的时候,TextBox.Text=null;
    加上以上代码后,就会是你所填的值!!
    试一下吧.