注册 登录
编程论坛 ASP.NET技术论坛

为什么我的用户登陆的代码有错?-->阳光白雪转移

水晶之恋 发布于 2007-04-27 14:15, 973 次点击

请问:我这段用户登陆的代码有错吗?我数据库中数据如下:
username Login_ID password Login_level
李霞 administrator 123 0
张洋 aa aa 1

当我输入login_ID:administrator,password:123时,我想让他跳转的是index.aspx,结果怎么跳转到scan.aspx页面呢?不明白!

public void DBOpen()
{
strConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
conn = new SqlConnection(strConnectionString);
conn.Open();
}

//检测用户输入的用户名和密码的正确性
private void submit_Click(object sender, System.EventArgs e)
{
string str;
if(txtlogname.Text==""||txtlogpwd.Text=="")
{
Response.Write("<script>javascript:alert('您输入的用户名或密码有一项为空,为了安全起见,请每项都输入!');</script>");
Response.Write("javascript:window.location='Login.aspx'");
}
else
{
str="select username from login where login_ID='" + txtlogname.Text + "' and password='" + txtlogpwd.Text + "'";
DBOpen();
com=new SqlCommand(str,conn);

string user_name=Convert.ToString(com.ExecuteNonQuery());

if(user_name!=null)
{
Input(user_name);
}
else
{
message.Visible=true;
message.Text="您不是公司的员工,无权访问!";
}
conn.Close();
}
}

private void Input(string name)
{
Session["UserID"]=txtlogname.Text;
Session["username"]=name;
string level="select login_level from login where login_ID='" + txtlogname.Text + "'";
DBOpen();
com=new SqlCommand(level,conn);
string lev=Convert.ToString(com.ExecuteNonQuery());
Session["login_level"]=Convert.ToInt32(lev);
if(Convert.ToInt32(lev)==0)
{
Response.Write("<script>javascript:alert('您是超级用户,具有管理员工信息的权限!');</script>");
Response.Redirect("index.aspx");
}
else
{
Response.Write("<script>javascript:alert('您是普通用户,只具有一般的浏览和查询的权限!');</script>");
Response.Redirect("scan.aspx");
}
}

10 回复
#2
djx5202007-04-27 15:38

string user_name=Convert.ToString(com.ExecuteNonQuery());这句错了
应该是
SqlDataReader dr=cmd.ExecuteReader()
if(dr.next())
{
//后面函数的参数也不要
Input();

}


后面函数的string lev=Convert.ToString(com.ExecuteNonQuery());
这里也想前面一样改SqlDataReader dr=cmd.ExecuteReader()
if(dr.next())
{

Response.Write("<script>javascript:alert('您是超级用户,具有管理员工信息的权限!');</script>");
Response.Redirect("index.aspx");

}

#3
卡洛2007-04-27 16:41
她那句是要把读出来数据传到变量里。如果按照2楼你这样的方法,她里面改变的就多了。
#4
卡洛2007-04-27 16:45
我现在设计到有数据传送的东西都用SqlDataAdapter来实现。用SqlCommand做数据库里执行判断还好点。做数据传输好象就比较麻烦了吧`
#5
djx5202007-04-27 16:52
回复:(djx520)string user_name=Convert.ToString(...

但是她那样做登陆是错的,是的不出结果的

#6
水晶之恋2007-04-27 17:08

那我应该怎么做呢?
请高手指教!!

#7
卡洛2007-04-27 17:16
恩,刚看了一下。
ExecuteNonQuery()这个方法是反应影响的行数。就算有数据,类型转换成string以后只是显示些数字
并不能得到你需要的username。
你可以用ExecuteScalar()试一下。
#8
rstp2007-04-27 17:16
ExecuteNonQuery() 函数返回值是受影响的行数,也就是说,在你的选择权限的时候返回值是1 不是0 ,因为有administrator这个用户,这样必然跳转到sacn那个页面了。。。
#9
卡洛2007-04-27 17:24
用SqlDataAdapter的Fill填充个DataSet什么的。这样好做点。可以控制DS的DataTable来传输数据库里的数据
#10
水晶之恋2007-04-27 17:40

真复杂啊
有没有什么更好的编码能够实现这一功能呢?
难道只能这样吗?

#11
rstp2007-04-27 17:57
可以使用SqlDataReader
string commandText ="select userName from table where userID=1";
SqlCommand cmd = new SqlCommand(commandText,conn);
SqlDataReader Reader = cmd.ExcuteReader();]
string getReturn;
while(Reader.Read())
{
getReturn = Reader.getValue(0).ToString();
}
getRetrun 得到的就是userID=1的用户的用户名,ps必须以userID=1的用户只有一个哈
来得到返回的东东
1