2017-08-27 1 views
3

Nachdem der Benutzer registriert ist; Die Mitgliedschaft des Benutzers wird standardmäßig als "passiv" gespeichert. Ich mache das in folgender Weise: Ich habe eine Zeile namens "active" in meiner Benutzertabelle und der Datentyp dieses Feldes ist ein Bit und der Standardwert dieses Feldes ist 0. Was ich tun möchte ist: Wenn der Benutzer nicht hat habe seinen Account aktiviert, ich möchte, dass er eine Warnung erhält, aber ich habe System.IConvertible error bekommen. Mein login.aspx.cs ist wie folgt:Ich kann SQL nicht konvertieren Select Query Result in Bit

DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'"); 
if(Convert.ToInt32(drlogin) == 0) 
{ 
    string message = "<script>alert('You can't login because your account is not active!');</script>"; 
} 
else 
{ 
    // Login operations 
} 

Antwort

0

Diese Linie ist giftig, Roboter Ihre Website-Hack wird, sobald Sie es veröffentlichen:

DataRow drlogin = function.GetDataRow("SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'"); 

Use parameters und keine String-Verkettung!

können Sie konvertieren nicht DataRow-Int32, außerdem ist es eine bit Säule ist, die bool umgewandelt werden soll. So sollte es so aussehen:

if(!Convert.ToBoolean(drlogin[0])) 

oder

if(!Convert.ToBoolean(drlogin["isactive"])) 
0

Verwendung dieses SQL Statt Ihre ein:

"SELECT ISNULL((SELECT isactive FROM user WHERE email = '" + TxtEMail.Text + "'),0)" 
+0

Ich habe und Fehler in "if" die Codezeile. Wie kann ich diese Zeile ändern? – Shadouspan

2

Zunächst sollten Sie Parameter verwenden, anstatt munging die Query-String mit Parameterwerten.

Zweitens können Sie auf den Typ konvertieren Sie wollen, die eine ganze Zahl zu sein scheint:

SELECT CAST(isactive as int) as isactive 
FROM user 
WHERE email = '" + TxtEMail.Text + "'";