2011-12-03 10 views
0

我正在嘗試爲Web應用程序的管理員開發一個簡單的用戶管理系統。我正在使用ASP.NET嚮導控制執行此任務。 我只是把一個TextBox寫入用戶名,當管理員點擊Next按鈕時,系統應該檢查用戶名是否存在於數據庫中。如果存在,系統應該在管理員的佔位符中顯示他的信息。如何在嚮導中檢查他的用戶名後檢索佔位符中的用戶信息?

我正在努力完成這項任務。我沒有在後臺代碼如下:

protected void Page_Load(object sender, EventArgs e) 
{ 

    //Session["Username"] = Username.Text; 
    string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=testdb;Integrated Security=True"; 
    string cmdText = "SELECT * FROM employee WHERE Username = @Username"; 

    //For checking the user 
    if (Request.QueryString["Username"] != null) 
    { 
     String strUserName = Request.QueryString["Username"]; 

     ////Check userName Here 
     //String strReturnStatus = "false"; 

     if (CheckUsername(Request.QueryString["Username"]) == true) 
     { 
      //strReturnStatus = "true"; 
      try 
      { 
       SqlConnection conn = new SqlConnection(connString); 
       conn.Open(); 
       SqlDataReader myReader = null; 
       SqlCommand myCommand = new SqlCommand(cmdText, conn); 
       myReader = myCommand.ExecuteReader(); 
       while (myReader.Read()) 
       { 
        Console.WriteLine(myReader["Name"].ToString()); 
        Console.WriteLine(myReader["Job"].ToString()); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 
     //Response.Clear(); 
     //Response.Write(strReturnStatus); 
     //Response.End(); 
    } 
} 

private bool CheckUsername(string username) 
{ 
    string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=testdb;Integrated Security=True"; 
    string cmdText = "SELECT * FROM employee WHERE Username = '" + username + "'"; 

    using(SqlConnection conn = new SqlConnection(connString)) 
    { 
     conn.Open(); // Open DB connection. 

     using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
     { 
      int count = (int)cmd.ExecuteScalar(); 
      // True (> 0) when the username exists, false (= 0) when the username does not exist. 
      return (count > 0); 
     } 
    } 

} 

我試着寫在文本框中任何用戶名來測試這一點,但是當我點擊了應該重定向嚮導的下一個按鈕,我沒有得到任何結果我到佔位符或任何應該顯示用戶信息的控件。我現在想要的只是顯示用戶的信息,如果他的用戶名存在於數據庫中的話。怎麼做?

+2

首先看看http://msdn.microsoft.com/en-us/magazine/cc163894.aspx。如果它是一個互聯網項目,那麼請閱讀sql注入。 – Asken

+0

您是否使用Request.QueryString [「Username」]傳遞給此頁面的用戶名CheckUsername()函數返回true? – Waqas

回答

0

首先您需要了解頁面加載和回發的概念。在Page_Load內部編寫的代碼將在每次加載頁面時執行,方法是在瀏覽器中輸入URL或通過按鈕單擊事件。你應該把你只想在

if(!isPostback) 
{ 
//code to be need to be executed for the first time 
//only goes within this block 
} 

然後作爲Asken建議一旦執行該代碼看看SQL注入太

現在關於這個問題,在您的Page_Load情況下,您有:

string cmdText = "SELECT * FROM employee WHERE Username = @Username"; 

你需要設置@username參數的值,這是你如何能做到這一點:

myCommand.Parameters.Add("@Username", SqlDbType.VarChar, 30); //assumption: UserName column is of varchar type length of 30 
nonqueryCommand.Parameters["@Username"].Value = strUserName; 
+0

我想要的只是在Wizard控件中檢查用戶的用戶名,當我點擊Next按鈕時,我應該被重定向到另一個包含Repeater控件的步驟,該控件顯示該用戶名的所有信息。我正在努力解決這個問題。我是一名新的ASP.NET開發人員,自從我的第一個項目以來,我一直在爲這些許多概念苦苦掙扎。我在這個項目中使用Windows身份驗證,我不確定使用QueryString是否正常,或者我應該使用Session變量。如果你能幫助我解決這個問題,這將會非常有幫助。 – user976711

+0

這裏給出了一個非常詳細和相關的教程http://msdn.microsoft.com/en-us/library/ms178342.aspx,你可以使用CreateUserWizard1_NextButtonClick事件來檢查用戶是否存在。 – Waqas

相關問題