判断用户名错误还是密码错误怎么会报错的呢

时间:2022-04-07 14:52:15
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Collections;

public partial class login : System.Web.UI.Page
{
 
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        //连接数据库
        SqlConnection sqlconstr = new SqlConnection();
        sqlconstr.ConnectionString = "server=localhost;database=employee;uid=sa;pwd='111111'";
        sqlconstr.Open();

        //Response.Write(sqlconstr.State.ToString());
        
        //获取客户端的信息
        string strUsername = this.Username.Text.Trim();
        string strPassword = this.Password.Text.Trim();

        //创建SQL语句
        string mysql = "select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'";

        SqlCommand cmd = new SqlCommand(mysql, sqlconstr);

        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            //Response.Write("登录成功");
            //Response.Write("<script>alert('登录成功');location='emplist'</script>");
           // Response.Redirect("emplist.aspx");
            string power=dr["per"].ToString();
            if (this.userRadio.Checked == true && power == "2")
            {
                Response.Redirect("emplist.aspx");
            }
            else
            {
                if (this.admRadio.Checked == true && power == "1")
                {
                    Response.Redirect("admManage.aspx");
                }
                else
                {
                    this.logMessage.Visible = true;
                    this.logMessage.Text = "你的用户权限有误,请重新登录";
                }
            }
        }
        else
        {
            //Response.Write("用户名或密码不正确");
            //this.Username.Text = "";
            //判断用户名错误还是密码错误
            if (dr["username"].ToString() != strUsername)
            {
                this.logMessage.Visible = true;
                this.logMessage.Text = "用户名错误";
            }
            else
            {
                this.logMessage.Visible = true;
                this.logMessage.Text = "密码错误!";
            }
        }
        dr.Close();
        sqlconstr.Close();

    }
}
判断用户名错误还是密码错误怎么会报错的呢

12 个解决方案

#1


if (dr.Read()) 是有数据时 反之else就是无数据  你都没有返回数据 
还dr["username"]ToString() != strUsername

select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'"
当用户名密码不正确 查询结果是没数据的

你要判断是用户名还是密码错误得自己再写sql语句判断

#2


lz密码或用户名不正确的时候,dr.Read()是读不出数据的

dr["username"].ToString()肯定没有啊
要想判断是密码或者是用户名错误,语句得分两次查
string mysql = "select * from empInfo where username='" + strUsername+ "'";
string  mysql2 = "select * from empInfo where password='" + strPassword + "'";

SqlCommand cmd = new SqlCommand(mysql, sqlconstr);
SqlDataReader dr = cmd.ExecuteReader();
SqlDataReader dr2 = cmd.ExecuteReader();
if(!dr.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "用户名错误";
}
if(!dr2.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "密码错误!";
}

#3


Quote: 引用 1 楼 ysn1314 的回复:

if (dr.Read()) 是有数据时 反之else就是无数据  你都没有返回数据 
还dr["username"]ToString() != strUsername

select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'"
当用户名密码不正确 查询结果是没数据的

你要判断是用户名还是密码错误得自己再写sql语句判断
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Collections;

public partial class login : System.Web.UI.Page
{
 
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        //连接数据库
        SqlConnection sqlconstr = new SqlConnection();
        sqlconstr.ConnectionString = "server=localhost;database=employee;uid=sa;pwd='111111'";
        sqlconstr.Open();

        //Response.Write(sqlconstr.State.ToString());
        
        //获取客户端的信息
        string strUsername = this.Username.Text.Trim();
        string strPassword = this.Password.Text.Trim();

        //创建SQL语句
        string mysql = "select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'";

        SqlCommand cmd = new SqlCommand(mysql, sqlconstr);

        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            //Response.Write("登录成功");
            //Response.Write("<script>alert('登录成功');location='emplist'</script>");
           // Response.Redirect("emplist.aspx");
            string power=dr["per"].ToString();
            if (this.userRadio.Checked == true && power == "2")
            {
                Response.Redirect("emplist.aspx");
            }
            else
            {
                if (this.admRadio.Checked == true && power == "1")
                {
                    Response.Redirect("admManage.aspx");
                }
                else
                {
                    this.logMessage.Visible = true;
                    this.logMessage.Text = "你的用户权限有误,请重新登录";
                }
            }
        }
        else
        {
            string mysql1 = "select * from empInfo where username='" + strUsername+ "'";
            SqlCommand cmd1 = new SqlCommand(mysql1, sqlconstr);

            SqlDataReader dr1 = cmd1.ExecuteReader();
            //Response.Write("用户名或密码不正确");
            //this.Username.Text = "";
            //判断用户名错误还是密码错误
            if(dr1.Read())
            {
                this.logMessage.Visible = true;
                this.logMessage.Text = "密码错误";
            }
            else
            {
                this.logMessage.Visible = true;
                this.logMessage.Text = "用户名错误!";
            }
        }
        dr.Close();
        sqlconstr.Close();

    }
} 判断用户名错误还是密码错误怎么会报错的呢怎么改

#4


引用 2 楼 u010349035 的回复:
lz密码或用户名不正确的时候,dr.Read()是读不出数据的

dr["username"].ToString()肯定没有啊
要想判断是密码或者是用户名错误,语句得分两次查
string mysql = "select * from empInfo where username='" + strUsername+ "'";
string  mysql2 = "select * from empInfo where password='" + strPassword + "'";

SqlCommand cmd = new SqlCommand(mysql, sqlconstr);
SqlDataReader dr = cmd.ExecuteReader();
SqlDataReader dr2 = cmd.ExecuteReader();
if(!dr.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "用户名错误";
}
if(!dr2.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "密码错误!";
}

判断用户名错误还是密码错误怎么会报错的呢怎么会报错的呢

#5


因为打开的是同一个DataReader
等等,我给你写一下

#6


写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用

#7


引用 6 楼 u010349035 的回复:
写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用

共享一下你写的,看看

#8


引用 7 楼 u012651703 的回复:
Quote: 引用 6 楼 u010349035 的回复:

写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用

共享一下你写的,看看

我们都不这样写的,都是封装好的方法,再调用,而且拼接sql语句的话会出现注入攻击

#9


再说了你为什么要判断是用户名或者是密码错误呢,密码和用户名一起查,不分开查,如果查不到数据直接提示密码或用户名错误

#10


SqlDataReader的read()方法是将游标指向下一条记录,如果有就返回true,没有返回flase,所以每次read()为true的时候才能通过reader["字段名"]去读取数据

#11


"select top 1 * From username=@username"
....
DataTable dt=...
if(dt==null || dt.Rows.Count<=0){
  用户不存在
  return;
}

if(dt.Rows[0]["password"].ToString()!=strPassword){
   密码不正确
   return;
}

这个就对了

#12


else里面直接提示用户名或密码不存在就行了,都没查到数据怎么去判断。人家网站都是这么提示,顶多也就再提示个该用户名不存在。这样你可以只把用户名作为条件去查数据,查不到就提示用户名不存在,查到了,就把密码取出来判断对不对。

#1


if (dr.Read()) 是有数据时 反之else就是无数据  你都没有返回数据 
还dr["username"]ToString() != strUsername

select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'"
当用户名密码不正确 查询结果是没数据的

你要判断是用户名还是密码错误得自己再写sql语句判断

#2


lz密码或用户名不正确的时候,dr.Read()是读不出数据的

dr["username"].ToString()肯定没有啊
要想判断是密码或者是用户名错误,语句得分两次查
string mysql = "select * from empInfo where username='" + strUsername+ "'";
string  mysql2 = "select * from empInfo where password='" + strPassword + "'";

SqlCommand cmd = new SqlCommand(mysql, sqlconstr);
SqlDataReader dr = cmd.ExecuteReader();
SqlDataReader dr2 = cmd.ExecuteReader();
if(!dr.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "用户名错误";
}
if(!dr2.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "密码错误!";
}

#3


Quote: 引用 1 楼 ysn1314 的回复:

if (dr.Read()) 是有数据时 反之else就是无数据  你都没有返回数据 
还dr["username"]ToString() != strUsername

select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'"
当用户名密码不正确 查询结果是没数据的

你要判断是用户名还是密码错误得自己再写sql语句判断
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Collections;

public partial class login : System.Web.UI.Page
{
 
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        //连接数据库
        SqlConnection sqlconstr = new SqlConnection();
        sqlconstr.ConnectionString = "server=localhost;database=employee;uid=sa;pwd='111111'";
        sqlconstr.Open();

        //Response.Write(sqlconstr.State.ToString());
        
        //获取客户端的信息
        string strUsername = this.Username.Text.Trim();
        string strPassword = this.Password.Text.Trim();

        //创建SQL语句
        string mysql = "select * from empInfo where username='" + strUsername+ "' and password='" + strPassword + "'";

        SqlCommand cmd = new SqlCommand(mysql, sqlconstr);

        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            //Response.Write("登录成功");
            //Response.Write("<script>alert('登录成功');location='emplist'</script>");
           // Response.Redirect("emplist.aspx");
            string power=dr["per"].ToString();
            if (this.userRadio.Checked == true && power == "2")
            {
                Response.Redirect("emplist.aspx");
            }
            else
            {
                if (this.admRadio.Checked == true && power == "1")
                {
                    Response.Redirect("admManage.aspx");
                }
                else
                {
                    this.logMessage.Visible = true;
                    this.logMessage.Text = "你的用户权限有误,请重新登录";
                }
            }
        }
        else
        {
            string mysql1 = "select * from empInfo where username='" + strUsername+ "'";
            SqlCommand cmd1 = new SqlCommand(mysql1, sqlconstr);

            SqlDataReader dr1 = cmd1.ExecuteReader();
            //Response.Write("用户名或密码不正确");
            //this.Username.Text = "";
            //判断用户名错误还是密码错误
            if(dr1.Read())
            {
                this.logMessage.Visible = true;
                this.logMessage.Text = "密码错误";
            }
            else
            {
                this.logMessage.Visible = true;
                this.logMessage.Text = "用户名错误!";
            }
        }
        dr.Close();
        sqlconstr.Close();

    }
} 判断用户名错误还是密码错误怎么会报错的呢怎么改

#4


引用 2 楼 u010349035 的回复:
lz密码或用户名不正确的时候,dr.Read()是读不出数据的

dr["username"].ToString()肯定没有啊
要想判断是密码或者是用户名错误,语句得分两次查
string mysql = "select * from empInfo where username='" + strUsername+ "'";
string  mysql2 = "select * from empInfo where password='" + strPassword + "'";

SqlCommand cmd = new SqlCommand(mysql, sqlconstr);
SqlDataReader dr = cmd.ExecuteReader();
SqlDataReader dr2 = cmd.ExecuteReader();
if(!dr.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "用户名错误";
}
if(!dr2.Read())
{
       this.logMessage.Visible = true;
       this.logMessage.Text = "密码错误!";
}

判断用户名错误还是密码错误怎么会报错的呢怎么会报错的呢

#5


因为打开的是同一个DataReader
等等,我给你写一下

#6


写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用

#7


引用 6 楼 u010349035 的回复:
写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用

共享一下你写的,看看

#8


引用 7 楼 u012651703 的回复:
Quote: 引用 6 楼 u010349035 的回复:

写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用

共享一下你写的,看看

我们都不这样写的,都是封装好的方法,再调用,而且拼接sql语句的话会出现注入攻击

#9


再说了你为什么要判断是用户名或者是密码错误呢,密码和用户名一起查,不分开查,如果查不到数据直接提示密码或用户名错误

#10


SqlDataReader的read()方法是将游标指向下一条记录,如果有就返回true,没有返回flase,所以每次read()为true的时候才能通过reader["字段名"]去读取数据

#11


"select top 1 * From username=@username"
....
DataTable dt=...
if(dt==null || dt.Rows.Count<=0){
  用户不存在
  return;
}

if(dt.Rows[0]["password"].ToString()!=strPassword){
   密码不正确
   return;
}

这个就对了

#12


else里面直接提示用户名或密码不存在就行了,都没查到数据怎么去判断。人家网站都是这么提示,顶多也就再提示个该用户名不存在。这样你可以只把用户名作为条件去查数据,查不到就提示用户名不存在,查到了,就把密码取出来判断对不对。