Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义验证器总是检索true,即使它不是_C#_Sql Server - Fatal编程技术网

C# 自定义验证器总是检索true,即使它不是

C# 自定义验证器总是检索true,即使它不是,c#,sql-server,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

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始终为true 即使我将if转到: 如果a>=1

我更新了代码CVmax总是有效的为什么??
我尝试做每一件事,但都没有成功请帮助

我使用了ORM以外的其他工具,但我提出了以下建议:

1查看您如何处理ExecuteScalar响应,请参见[此处]:

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
 }

我肯定会运行调试器,但你确定它不会跳过第二个if吗

正如@DavidG所说,您的代码格式很差。在组织了一点之后,你的一些“如果”看起来甚至没有击中目标。在您提供的代码段中,NameExist>0位没有替代项,因此只需输入正确的用户名


因此,坦率地说,废弃代码,重新开始使用正确的格式和使用。

您至少可以正确地格式化代码吗?如果控件进入a>=10,您是否调试过?必须向CVmax提供什么初始值?即使我将if设置为:if a>=1,验证器CVmax也始终为true:如果a>=1,当您在调试器中单步执行代码时,a具有什么值?请将您的问题放在一边,您确实需要了解C代码是如何编写的。您缺少使用语句,并且您初始化/命名对象的方式显示您缺乏知识。你有没有试过看看数据库到底有什么价值?旁注:出于对非托管资源的热爱,请对IDisposable的东西使用using语句。如果带有ExecuteScalar的行出于任何原因引发异常,连接将永远不会关闭。不,不,不!不要建议使用这样的SQL—它极易受到SQL注入攻击。如果使用“%”++@user++“%”作为like,则like用户可以输入一个通用的单个字符(例如a),它会根据用户数据库的大小找到许多匹配项。不起作用,非常危险。删除建议
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";
    }