2014-05-01 68 views
0
string checkuserQuery = "select username from usersign where Username=' " + TextBox1.Text + " ' "; 
SqlCommand usercom = new SqlCommand(checkuserQuery, conn); 
string user1 = string.Empty; 
Object val = usercom.ExecuteScalar(); 
if (val != null) 
{ 
    user1 = val.ToString(); 
    if (user1 == TextBox1.Text) 
    { 

     string checkpasswordQuery = "select password from usersign  where Username=' " + TextBox1.Text + " ' "; 
     SqlCommand passcom = new SqlCommand(checkpasswordQuery, conn); 
     string password = passcom.ExecuteScalar().ToString(); 
     if (password == TextBox2.Text) 
     { 
      Session["New"] = TextBox1.Text; 
      Label5.Text = "password is correct"; 
      Response.Redirect("user.aspx"); 
     } 
     else 
     { 
      Label5.Text = "password is not correct"; 

     } 

    } 
} 
else 
{ 
    Label5.Text = "val is null"; 
} 
} 
+1

它在哪裏「不工作」?我們可以解決您的問題 – kevchadders

回答

0

的問題可能是在空格字符以下的(我已經把在空間 不正確使用*)

where Username='*" + TextBox1.Text + "*' " 

所以上面將意味着您的查詢試圖要獲取一個用戶名,該用戶名在開始和結尾處具有空格字符,因此只需刪除這些空格

另一點是,此類查詢應該與參數一起使用,因爲它很容易出現 SQL注入類型at大頭針

+0

謝謝..空間導致問題 – user3591497

1

ExecuteScalar()如果查詢未返回值,將返回空值。

如果結果集爲空,則返回結果集中第一行的第一列或空值 引用(在Visual Basic中爲Nothing)。

Source

這條線將拋出一個空引用異常:使用字符串連接

passcom.ExecuteScalar().ToString(); 

構建查詢很容易出錯。更重要的是,它很容易被SQL注入。該代碼表明密碼以純文本形式存儲在數據庫中。

SQL注入和純文本密碼是任何應用程序的嚴重問題。使用ADO.Net參數化您的查詢(使用ADO.Net非常簡單)並散列您的密碼。

缺乏一個匹配的可能是引起下面一行:

string checkpasswordQuery = "select password from usersign  where Username=' " + TextBox1.Text + " ' "; 

注意多餘的空格在字符串連接添加。無論是在TextBox1之前還是之後都會有空格,導致匹配失敗。

+0

謝謝..空間導致問題 – user3591497