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语句判断
还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 = "密码错误!";
}
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
#4

#5
因为打开的是同一个DataReader
等等,我给你写一下
等等,我给你写一下
#6
写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用
#7
共享一下你写的,看看
#8
我们都不这样写的,都是封装好的方法,再调用,而且拼接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;
}
这个就对了
....
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语句判断
还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 = "密码错误!";
}
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
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
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
写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉sql语句),为什么不把这个方法写成公共方法呢?再调用
共享一下你写的,看看
#8
写数据库拼接的话只能把打开连接到关闭连接的方法再重新写一遍(改掉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;
}
这个就对了
....
DataTable dt=...
if(dt==null || dt.Rows.Count<=0){
用户不存在
return;
}
if(dt.Rows[0]["password"].ToString()!=strPassword){
密码不正确
return;
}
这个就对了
#12
else里面直接提示用户名或密码不存在就行了,都没查到数据怎么去判断。人家网站都是这么提示,顶多也就再提示个该用户名不存在。这样你可以只把用户名作为条件去查数据,查不到就提示用户名不存在,查到了,就把密码取出来判断对不对。