6

ステートメントで例外Invalid column name 'False'が発生しています

reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

falseこれは、SQLのブール型が「ビット」であり、に変換されないことに関係している可能性があることを理解しています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");
            }
        }
4

1 に答える 1

8

IsLockedOut =0false のチェックに使用します。

IsLockedOut は、false の場合は 0、true の場合は 1 を格納するビット データ型のフィールドです。

同じことがクエリで使用されます/

IsLockedOut が varchar フィールドの場合、IsLockedOut='False'文字列の比較中に使用します。

于 2012-06-03T07:22:04.957 に答える