2012-06-03 20 views
5

sto diventando un'eccezione nome di colonna non valido 'False' alla dichiarazioneEccezione t "nome di colonna non valido 'False' con SqlConnection

reader = cmd.ExecuteReader(CommandBehavior.SingleRow); 

ho la comprensione che questo può avere qualcosa a che fare con tipo booleano di SQL essere un "bit" e non la conversione false-0. Come si fa a mitigare tale, o è che il problema qui?

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"); 
      } 
     } 

risposta

6

Usa IsLockedOut =0 per la verifica di falsa.

IsLockedOut è un campo con bit datatype che memorizza 0 per false e 1 per vero.

Così stesso viene utilizzato nella query/

Se IsLockedOut è campo varchar quindi utilizzare IsLockedOut='False' durante il confronto di stringa confrontare.

+0

Questo ha funzionato. Sto imparando velocemente! Questa è la prima volta che faccio una programmazione. Grazie per la risposta veloce. – RyanJMcGowan

+0

GRANDI ringraziamenti! Quello era l'ultimo bug. Che sollievo!!! – RyanJMcGowan

Problemi correlati