// 这个没有就近原则。
if (ds.Tables.Count > 0) 如果数据数大于0 进入此分支
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0) 满足数据数大于0了,在判断行数是否大于0,满足进入此分支
{
string sDBPwd = dt.Rows[0]["Pwd"].ToString().Trim();
if (sPwd == sDBPwd) // 行数>0了,此处判断第一行里的密码是否跟参数一样,一样进入此分支
{
user.AddTime = DateTime.Parse(dt.Rows[0]["AddTime"].ToString());
user.Pwd = dt.Rows[0]["Pwd"].ToString();
user.RealName = dt.Rows[0]["RealName"].ToString();
user.RoleID = dt.Rows[0]["RoleID"].ToString();
user.UserId = dt.Rows[0]["UserId"].ToString();
user.UserName = dt.Rows[0]["UserName"].ToString();
return true; // 数据库检索出的密码 跟 参数密码一致,返回true
}
// 跟数据库查询出的密码 跟 参数的密码 不一样则返回false
return false;
}
// 这个是上面判断行是否有数据的分支,如果行里数据<=0 ,执行
return false;
}
// 这个是那个Table里是否有数据,当<=0 时 执行的。
return false;
}
===================
你是看花眼了。给你个简单的,就看清出了。
if (i < 100) 不满足小于100,就不执行if里面的语句,就执行下面的return "i >= 100"
{
if (i < 50) 不满足小于50,就不执行if里面的语句,就执行下面的return "i >= 50"
{
if (i < 20) 不满足小于20,就不执行if里面的语句,就执行下面的return "i >= 20"
{
}
return "i >= 20"
}
return "i >= 50"
}
return "i >= 100"
就近原则是if和else之间的关系,if和if的关系只可能是顺序上的并列和嵌套.
这段代码里的就属于嵌套.
if (ds.Tables.Count > 0)//如果dataset里有datatable,执行操作,没有就反回false
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)//如果Datable里有数据执行操作,没有反回false
{
string sDBPwd = dt.Rows[0]["Pwd"].ToString().Trim();
if (sPwd == sDBPwd)//如果密码正确,将当前登陆User保存,不正确反回false
{
user.AddTime = DateTime.Parse(dt.Rows[0]["AddTime"].ToString());
user.Pwd = dt.Rows[0]["Pwd"].ToString();
user.RealName = dt.Rows[0]["RealName"].ToString();
user.RoleID = dt.Rows[0]["RoleID"].ToString();
user.UserId = dt.Rows[0]["UserId"].ToString();
user.UserName = dt.Rows[0]["UserName"].ToString();
return true;
}
return false;
}
return false;
}
return false;
}
第1个 IF : 如果数据集中的表的数量大于0 就执行
就初始化一张表DT等于上面数据集中的表0
否则
直接跳到最后1个RETURN FALSE
第2个IF(包含在第1个IF中,如果第1个执行不大于0,那么这个IF就会直接跳出,不执行该IF中包含的语句) : 如果DT表中的行数大于0
初始化1个字符串SDBPWD= DT表中第1行的PWD的值
第3个IF(包含在第2个IF中,如果第2个IF,判断不为真,不会到这一步) 如果SPWD与SDBPWD相等,表示密码正确,返回TRUE
关系我说不出来,你这3个IF,就好像箱子里面装箱子吧,第1个箱子不打开,后面的都打不开,任何一个箱子打不开,都会返回FALSE,就是密码验证失败,形容的不是很贴切,你关键看if 下面的两个大括号,{} 他括起来的代码,就是该IF如果判断为真的时候执行的
如果判断不为真,就直接跳到该IF的}下面去了
if (ds.Tables.Count > 0)//如果ds.Tables.Count 大于0的时候执行下面.否则执行括号以外的.
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)//当ds.Tables.Count 大于0且dt.Rows.Count 大于0执行下面,否则执行括号以外的,就是return false;
{
string sDBPwd = dt.Rows[0]["Pwd"].ToString().Trim();
if (sPwd == sDBPwd)//当上面两个条件都符合,且符合当前条件执行下面,否则执行括号以外的,就是return false;
{
user.AddTime = DateTime.Parse(dt.Rows[0]["AddTime"].ToString());
user.Pwd = dt.Rows[0]["Pwd"].ToString();
user.RealName = dt.Rows[0]["RealName"].ToString();
user.RoleID = dt.Rows[0]["RoleID"].ToString();
user.UserId = dt.Rows[0]["UserId"].ToString();
user.UserName = dt.Rows[0]["UserName"].ToString();
return true;//当执行到这里面完毕后,最后返回true .
}
return false;
}
return false;
}
return false;
}
if之内以{}为一个程序块。
if…A…then
{
//一个大括号{} 代表归属,
If…B…then
{
C
//此处结束为B的条件范围
}
//此处结束为止都属于A条件范围
}