2017-01-21 64 views
-4

我想創建一個登錄頁面,但但我的登錄按鈕不起作用。我從我的sql服務器數據庫中選擇用戶名和密碼。登錄屏幕使用asp.net和SQL Server

不幸的是,我得到一個錯誤

System.Data.SqlClient.SqlException:附近有語法錯誤'

第27行:下面

int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 

代碼:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ConnectionString); 
con.Open(); 

string checkuser = "select * from tb_Login where Username='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' "; 

SqlCommand com = new SqlCommand(checkuser, con); 

int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 
con.Close(); 

if (temp == 1) 
{ 
    con.Open(); 
    string checkPass = "select Password from tb_Login where Username='" + txtUsername.Text + "'"; 

    SqlCommand passCom = new SqlCommand(checkPass, con); 
    string password = passCom.ExecuteScalar().ToString().Replace(" ", ""); 

    if (password == txtPassword.Text) 
    { 
     Session["New"] = txtUsername.Text; 
     Response.Write("Correct"); 
    } 
    else 
    { 
     Response.Write("Not Correct"); 
    } 
} 
else 
{ 
    Response.Write("Username not correct"); 
} 
+2

您在用戶名後面缺少'=',應使用參數化查詢。任何人都可以通過SQL注入登錄或更糟。密碼也不應以純文本形式存儲。 –

+0

訪問您的應用程序的通用密碼是:''OR 1 == 1; - ' – David

+0

而且密碼顯然是以純文本格式存儲的。 – TTT

回答

0

這行代碼:

string checkuser = "select * from tb_Login where Username='" + txtUsername.Text + "' and Password='" + txtPassword.Text + "' "; 

是發送查詢到數據庫,並問:「給我所有的tb_Login其用戶名在txtUsername框中的值和密碼在txtPassword框中列。 「

那麼這條線將在第一行的第一列的值,並嘗試將其轉換爲整數,如果它不能將失敗:

int temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 

更改您的查詢來選擇一個欄只:你需要的欄目。

此外,請確保您閱讀this關於stackoverflow的問題,以便您可以看到您的代碼是如何對自己的應用程序的安全威脅。

+0

感謝您的幫助。我只是不理解如何更改此查詢:int temp = Convert.ToInt32(com.ExecuteScalar()。ToString()); –

+0

沒有那條線是好的。你需要改變你的sql查詢,因爲它使用'select *',所以它會得到很多列。你需要獲得你需要的列。我不知道該列的名稱,但如果它是'Column1',然後寫'從tb_Login中選擇Column1,其中Username =' – CodingYoshi

+0

感謝您的幫助。我非常感謝你和你的時間 –