C#用户登录验证能获取库中的名和密码,但不管密码对错都不能登录成功,新手望高手指教修改具体代码和位置

madaoman 2012-04-08 04:07:32
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\myData.mdf;Integrated Security=True;User Instance=True");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from T_user where username='" + TextBox1.Text + "' ";
SqlDataReader reader = cmd.ExecuteReader();

if (reader.Read())
{
string dbpw = reader.GetString(reader.GetOrdinal("password"));//从数据库中获取该用户的密码
Label2.Text = "";
Label1.Text = dbpw;
string pwd = TextBox2.Text;
if (pwd==dbpw)
{
Response.Redirect("welcome.htm");

}
else
{

Label3.Text = "密码错误!";
}

reader.Close();

}
else
{
Label2.Text = "用户名错误!";
}

con.Close();
}
...全文
378 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunylf 2012-04-09
  • 打赏
  • 举报
回复
單步調試,這麼簡單的題,我就看看熱鬧.
xiejin90314 2012-04-09
  • 打赏
  • 举报
回复
SqlDataReader reader = cmd.ExecuteReader();

if (reader.Read())
我也遇到这个情况。你要reader.Read()这个永远为真,你可以调试看看,不管用户对不对。。建议用datetable去判断是不是有这个用户。。至于为什么,你自己好好研究吧。。
huijunliang 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
字段password是nvarchar(50)类型,怎么解决?
[/Quote]

经过测试,我的字段类型也是 nvarchar(50) 是可以正常读取到正确的数据,你在看下是不是其他问题?

你确定数据的password 不是这个: "111 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"?????

ShadowInWind 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]
换成varchar也不行
[/Quote]
这个问题我2年前遇到过,后来怎么解决的忘记了, 你可以先去看看注册代码的位置,是否.trim去空格了
实在实在不行,你在读取数据以后做去\0处理, 判断字符串里是否有\0,如果有就截掉. 直到截完, 这个操作很容易的.
madaoman 2012-04-09
  • 打赏
  • 举报
回复
换成varchar也不行
yyl8781697 2012-04-09
  • 打赏
  • 举报
回复
断电一步一步测试下去,先看数据库有没有连接通,然后看cs里面获取的值有没有对,再看用账号密码字符串提交的数据库的返回的值式什么,返回了之后进行的操作有没有弄错,你每部调试后修改成功了估计就ok了
文子 2012-04-09
  • 打赏
  • 举报
回复
断点看数据 光看代码 没具体数据还真看不出来问题在哪
ShadowInWind 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
字段password是nvarchar(50)类型,怎么解决?
[/Quote]
你可以换成varchar试试
madaoman 2012-04-09
  • 打赏
  • 举报
回复
字段password是nvarchar(50)类型,怎么解决?

ShadowInWind 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
程序运行到这里
if (pwd==dbpw)

经过调试 pwd = "111" dbpw = "111 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

怎么解决?

。。。。。。。。

对不起各位,我刚刚上来。
[/Quote]
我估计代码或者数据库里有个字段用char类型了,然后后面就会生成这个字符来站用内存空间......
ShadowInWind 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
程序运行到这里
if (pwd==dbpw)

经过调试 pwd = "111" dbpw = "111 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

怎么解决?

。。。。。。。。

对不起各位,我刚刚上来。
[/Quote]
我估计代码或者数据库里有个字段用char类型了,然后后面就会生成这个字符来站用内存空间......
ShadowInWind 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
程序运行到这里
if (pwd==dbpw)

经过调试 pwd = "111" dbpw = "111 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

怎么解决?

。。。。。。。。

对不起各位,我刚刚上来。
[/Quote]
我估计代码或者数据库里有个字段用char类型了,然后后面就会生成这个字符来站用内存空间......
madaoman 2012-04-09
  • 打赏
  • 举报
回复
程序运行到这里
if (pwd==dbpw)

经过调试 pwd = "111" dbpw = "111 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

怎么解决?

。。。。。。。。

对不起各位,我刚刚上来。


madaoman 2012-04-09
  • 打赏
  • 举报
回复
问题解决了,O(∩_∩)O谢谢各位高手,
寂小魔 2012-04-09
  • 打赏
  • 举报
回复

protected void Button1_Click(object sender, EventArgs e)
{
string sql = "select count(*) from t_admin where adminname='"+TextBox1.Text.Trim()+"' and adminpwd='"+TextBox2.Text.Trim()+"'";
SqlConnection con = DB.ceartcon();//DB是我连接数据库的类
SqlCommand cmd = new SqlCommand(sql,con);
int i = Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
Session["name"] = TextBox1.Text.Trim();
Session["pwd"] = TextBox2.Text.Trim();
Response.Redirect("~/admin.aspx");
}
else
{
Response.Write("<script type='text/javascript'>alert('用户名或密码错误!')</script>");
}
}
  • 打赏
  • 举报
回复
string str="111 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
str=str.Replace("\0","");
if(str.Trim()==pwd.Trim())
{

//登录成功
}
else
//登录失败

madaoman 2012-04-09
  • 打赏
  • 举报
回复
表T_user中的数据有问题!
我新建了一个表,登陆成功了,可能是我用MD5向表中插入了两条数据的缘故。具体原因不清楚。


“在读取数据以后做去\0处理, 判断字符串里是否有\0,如果有就截掉. 直到截完”。麻烦给个代码,新手不要见怪。
xuelang1225 2012-04-09
  • 打赏
  • 举报
回复
string pdw=textbox2.text.trim();
xuelang1225 2012-04-09
  • 打赏
  • 举报
回复
单步调试看下取出来的密码和用户名是否真的完全一样。
虫二二 2012-04-08
  • 打赏
  • 举报
回复
看下你SQL语句 及数据库附加语句是否有问题
加载更多回复(16)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧