2016-05-05 1 views
0

Ich versuche eine SQL-Select-Anweisung zu verwenden, um aus einer Datenbank zu lesen, um ein Login-Formular zu validieren. Das Problem, das ich habe, ist, dass es mir einen ungültigen Spaltennamen sagt.Warum gibt diese SQL-Anweisung einen ungültigen Spaltennamenfehler?

SELECT * FROM users 
WHERE [username] = @theusername 
AND [password] = @thepassword 

wo @theusername ein parameratized Wert von „Rymo_18“ ist, und das Kennwort ist, im Interesse der Argumentation, „password“.

Die Fehler, die ich bekommen sind:

Ungültiger Spaltenname 'Rymo_18'.

Ungültiger Spaltenname ‚Passwort‘

Sie wissen nicht, warum ich diese Fehler bin immer. Ich habe versucht, die Werte um das = Zeichen zu tauschen, habe versucht, Werte direkt zu verwenden (username = "Rymo_18") und alle anderen Angelegenheiten des Fiedelns, um es zu beheben, und ich hatte kein Glück. Es gibt keine anderen Tabellen, die in meiner Datenbank "Benutzer" genannt werden.

EDIT: Hier ist der Code, wie es in der C# erscheint Ich verwende:

string user = unametext.Text; 
     string pword = pwordtext.Text; 

     string connectionstring = WebConfigurationManager.ConnectionStrings["elmtreeconnect"].ConnectionString; 

     SqlConnection myconnection = new SqlConnection(connectionstring); 

     myconnection.Open(); 

     string query = "SELECT * FROM users WHERE (username= @theusername OR email = @theusername) AND password = @thepassword"; 

     SqlCommand attemptLogin = new SqlCommand(query, myconnection); 

     attemptLogin.Parameters.AddWithValue("@theusername", user); 
     attemptLogin.Parameters.AddWithValue("@thepassword", pword); 

     SqlDataReader rdr = attemptLogin.ExecuteReader(); 

     if (rdr.HasRows) 
     { 
      Session["user"] = rdr["username"].ToString(); 
      Session["id"] = rdr["id"].ToString(); 
      Session["type"] = rdr["accountType"].ToString(); 

      Response.Redirect("loginsuccess.aspx"); 
     } 
     else 
     { 
      unametext.Text = ""; 
      pwordtext.Text = ""; 

      statusLabel.Text = "Login failed. Please try again, or contact [email protected] for assistance"; 

     } 

Danke für die Hilfe!

+5

verwendet werden müssen, um die Parameter in nicht mit ihnen in der Frage, wie gezeigt werden verketten. Sie sind also anfällig für SQL-Injection. –

+2

Ja. Vermeiden Sie die SQL-Injektion mithilfe vorbereiteter Anweisungen. –

+0

Und welche Sprache benutzen Sie? –

Antwort

0
string query = "select 1 from users where [email protected] and [email protected]"; 
... 
if(rdr.Read()){ 
... 
} 

exists Sie sollten in if exists(select...)

+0

benutze ich eine IndexOutOfRangeException in Zeile 108: Sitzung ["Benutzer"] = rdr ["Benutzername"].ToString(); –

+0

'wählen Sie id, username, accountType von Benutzern ...'. Wählen Sie nur, was Sie brauchen. –

+0

hat nicht funktioniert. Ich erhalte jetzt einen ungültigen Leseversuch, wenn keine Warnung vorhanden ist, die gleiche Meldung, die ich am Anfang erhalten habe, zusammen mit dem Spaltennamen. –