Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# 例外情况 &引用;无效的列名';假';使用SqlConnection_C#_Sql_Asp.net_Sql Server_Ado.net - Fatal编程技术网

C# 例外情况 &引用;无效的列名';假';使用SqlConnection

C# 例外情况 &引用;无效的列名';假';使用SqlConnection,c#,sql,asp.net,sql-server,ado.net,C#,Sql,Asp.net,Sql Server,Ado.net,我在语句中得到一个无效列名“False”的异常 reader = cmd.ExecuteReader(CommandBehavior.SingleRow); 我理解这可能与SQL的布尔类型是“位”有关,它不会将false转换为0。你如何缓解这种情况,或者这就是问题所在 public override bool ValidateUser(string username, string password) { bool isValid = false;

我在语句中得到一个无效列名“False”的异常

reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
我理解这可能与SQL的布尔类型是“位”有关,它不会将
false
转换为
0
。你如何缓解这种情况,或者这就是问题所在

    public override bool ValidateUser(string username, string password)
    {
        bool isValid = false;

        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand("SELECT Password, IsApproved FROM Users" +
                " WHERE Email = @Email AND ApplicationName = @ApplicationName AND IsLockedOut = False", conn);

        cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 128).Value = username;
        cmd.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 255).Value = m_ApplicationName;

        SqlDataReader reader = null;
        bool isApproved = true;
        string pwd = "";

        try
        {
            conn.Open();

            reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

            if (reader.HasRows)
            {
                reader.Read();
                pwd = reader.GetString(0);
                isApproved = reader.GetBoolean(1);
            }
            else
            {
                return false;
            }

            reader.Close();

            if (CheckPassword(password, pwd))
            {
                if (isApproved)
                {
                    isValid = true;

                    SqlCommand updateCmd = new SqlCommand("UPDATE Users SET LastLoginDate = @LastLoginDate" +
                                                            " WHERE Email = @Email AND ApplicationName = @ApplicationName", conn);

                    updateCmd.Parameters.Add("@LastLoginDate", SqlDbType.DateTime).Value = DateTime.Now;
                    updateCmd.Parameters.Add("@Email", SqlDbType.NVarChar, 255).Value = username;
                    updateCmd.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 255).Value = m_ApplicationName;

                    updateCmd.ExecuteNonQuery();
                }
            }
            else
            {
                conn.Close();

                UpdateFailureCount(username, "password");
            }
        }

使用
IsLockedOut=0
检查false

IsLockedOut是一个具有位数据类型的字段,它存储0表示false,存储1表示true

所以在查询中也使用相同的方法/


如果IsLockedOut是varchar字段,那么在比较字符串比较时使用
IsLockedOut='False'

就是这样做的。我学得很快!这是我第一次做任何编程。谢谢你的快速回复。