即使不是,自定义验证器总是会重现真实

时间:2016-06-02 22:32:22

标签: c# sql-server

C#代码:

string str = "Data Source=(LocalDB)\\MSSQLLocalDB;";
str += "AttachDbFilename=|DataDirectory|DinoData.mdf;";
str += "Integrated Security= True";

SqlConnection c;
c = new SqlConnection(str);
SqlCommand Cdd = new SqlCommand("SELECT COUNT(*) FROM [User] WHERE UserName LIKE @Username;", c);
Cdd.Parameters.AddWithValue("@Username", txtuser.Text);
c.Open();
int NameExist = (int)Cdd.ExecuteScalar();
c.Close();
if (NameExist > 0)
{
    CVName.IsValid = true;

    if ((bool)Session["Conect"])
    {
        SqlCommand getlev = new SqlCommand("SELECT level FROM [User] WHERE Username like @user", c);
        getlev.Parameters.AddWithValue("@user", txtuser.Text);
        c.Open();
        int a = (int)getlev.ExecuteScalar();
        c.Close();
        if (a>5)
        {
            CVSemi.IsValid = false;
            if (a >= 10)
            {
                CVmax.IsValid = false;
            }
            else
                CVmax.IsValid = true;
        }
        else
        {
            CVSemi.IsValid = true;
        }
    }
}
else
{
    CVName.IsValid = false;
    txtuser.CssClass = "err";
}
if (Page.IsValid)
{
    /*Something happen*/
}

验证器CVmax始终为真 即使我把if转到:  if (a >= 1)

我更新代码CVmax始终有效为什么? 我尝试做所有事情但没有成功请帮助

2 个答案:

答案 0 :(得分:0)

我会运行调试器以确定,但是你确定它没有跳过第二个&吗?

\

正如@DavidG所说,你的代码格式很差。在组织了一下之后,看起来你的一些IF甚至没有打。在代码段中,您没有替代if位,因此需要输入的是正确的用户名...

所以,说实话,请废弃代码并以正确的格式和if (NameExist > 0) { CVName.IsValid = true; // here you set the value to true. // supposing this if doesn't trigger, CVmax will stay true. if ((bool)Session["Conect"]) { SqlCommand getlev = new SqlCommand("SELECT level FROM [User] WHERE Username like @user", c); getlev.Parameters.AddWithValue("@user", txtuser.Text); c.Open(); int a = (int)getlev.ExecuteScalar(); c.Close(); if (a>5){ CVSemi.IsValid = false; if (a >= 10) { CVmax.IsValid = false; } else { CVmax.IsValid = true; } else { CVSemi.IsValid = true; } else { CVName.IsValid = false; txtuser.CssClass = "err"; } 重新开始。

答案 1 :(得分:-1)

因为我使用了ORM之外的其他东西已经有一段时间了,但我提出以下建议:

1)查看您处理ExecuteScalar响应的方式,请参见[此处]:https://stackoverflow.com/a/1999031/6415885

2)由于空响应在这里是一个明显的可能性,是否是ExecuteScalar的装箱,强制0响应?

 int a = (int)getlev.ExecuteScalar();

或应该是

int? a = (int?)getlev.ExecuteScalar();
 if (a != null)
 {
      if (a==0) {CVmax.IsValid = false;}
 }
 else
 {
      CVmax.IsValid = false
 }