2012-06-29 60 views
1

我想在C#中建立一個網站做一個簡單的登錄,但我不能連接到數據庫,如果在形式的屬性postbackurl我定義必須在哪裏去登錄後(/inicio.aspx),我的應用程序發送用戶沒有檢查該用戶和通行證是否存在,如果我不這樣做,什麼都不會發生。登錄C#與連接到SQL Server數據庫

在我的課,我有:

public DataSet sqlLogin(string usuario, string pass)//SOLO SE OCUPA 
{ 
    //SEOCUPA DATASERT YA QE NO SIRVE DATABALE Y EL DATASET SE LLENA CON ESE DATATABLE 
    string stSql = "select * from usuarios where usuario='"+usuario+"' and 
pass='"+pass+"'"; 
    Bd miBd = new Bd(); 
    DataTable dt = miBd.sqlSelect(stSql); 
    DataSet ds = new DataSet(); 
    ds.Tables.Add(dt); 
    return ds; 
} 
在我的形式

(在按鈕):

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    ClUsuario login = new ClUsuario(); 
    login.sqlLogin(txtUsuario.Text, txtPass.Text); 

    try 
    { 
     Response.Redirect("/Inicio.aspx"); 
    } 
    catch 
    { 
     lblMsg.Text = "usuario/password no validos"; 
    } 
} 
+2

如果讓它運行,您的代碼將容易受到SQL注入攻擊。您可以通過使用參數化命令而不是連接字符串(以'string stSql = ...'開頭的行)來緩解這種情況。看到這裏的一些解釋:http://msdn.microsoft.com/en-us/library/ff648339.aspx –

回答

1

您必須使用此代碼替換代碼

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    ClUsuario login = new ClUsuario(); 
    bool isAuthenticated = login.sqlLogin(txtUsuario.Text, txtPass.Text); 
    if (isAuthenticated) 
    { 
     Response.Redirect("/Inicio.aspx"); 
    } 
    else  
    { 
     lblMsg.Text = "usuario/password no validos"; 
    } 
} 


And return bool in your sqlLogin 

try with this code 

if(dt.Rows.Count > 0) 
{ 
    return true; 
} 
return false; 
+0

謝謝,在這一刻我測試這段代碼,但我有一個問題,我必須reeplace我的代碼在該代碼的類如果(dt.Rows.Count ...)????提前致謝。 – suely

+1

很高興能夠解決您的問題,是的,您可以用dt.Rows.Count替換,但是如果我使用bool進行代碼驗證,則基於true或false保留概念。 –

+0

必須是這樣的嗎?因爲我沒有得到它... public DataSet sqlLogin(string usuario,string pass Bd miBd =「select * from usuarios where usuario ='」+ usuario +「'and pass ='」+ pass +「'」; Bd miBd = (dt.Rows.Count> 0);如果(dt.Rows.Count> 0),則返回ds; ; { 迴歸真實; } 返回false;} 刪除 – suely

1

試試這個:

try 
{ 
    var ds = login.sqlLogin(txtUsuario.Text, txtPass.Text); 
    if(ds.Tables[0].rows.count > 0) { 
     Response.Redirect("/Inicio.aspx"); 
    } 
    else {lblMsg.Text = "usuario/password no validos";} 

} 
catch 
{ 
    lblMsg.Text = "Error Occurred!"; 
} 

也嘗試在您的查詢中使用sql參數。

+0

您應該像現在一樣修改catch-clause:它當前創建的輸出(「usuario/password no validos」)不正確,它只會吞下有用的異常信息。 –

+0

對,我不確定如何用OPs語言編寫。 –