C# 在向导中检查占位符的用户名后,如何在占位符中检索用户信息?

C# 在向导中检查占位符的用户名后,如何在占位符中检索用户信息?,c#,asp.net,C#,Asp.net,我正在尝试为web应用程序的管理员开发一个简单的用户管理系统。我正在使用ASP.NET向导控件执行此任务。 我只是放了一个文本框来写用户名,当管理员点击Next按钮时,系统应该检查数据库中是否存在用户名。如果存在,系统应该在管理员的占位符中显示他的信息 我正在努力完成这项任务。我在代码隐藏中执行了以下操作: protected void Page_Load(object sender, EventArgs e) { //Session["Username"] = Username.Te

我正在尝试为web应用程序的管理员开发一个简单的用户管理系统。我正在使用ASP.NET向导控件执行此任务。 我只是放了一个文本框来写用户名,当管理员点击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);
         }
    }

}

我试图通过在文本框中写入任何用户名来测试这一点,但当我单击向导的“下一步”按钮时,没有得到任何结果,该按钮应将我重定向到占位符或任何应显示用户信息的控件。我现在想要的只是显示用户的信息,如果他的用户名存在于数据库中。如何做到这一点?

首先,您需要了解页面加载和回发的概念。每次通过在浏览器中输入URL或通过按钮单击事件加载页面时,页面加载中写入的代码都将执行。您应该将只希望执行一次的代码放在

if(!isPostback)
{
//code to be need to be executed for the first time
//only goes within this block
}
然后,正如Asken所建议的,我们也来看看SQL注入

关于这个问题,在页面加载事件中,您有:

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;

首先,请看一看。如果它是一个internet项目,那么请阅读sql注入。您是否检查用户名函数返回true作为您使用Request.QueryString[username]传递到此页面的用户名?我想要的只是检查向导控件内用户的用户名,当我单击下一步按钮时,我应该被重定向到另一个步骤,该步骤包含一个中继器控件,该控件显示该用户名的所有信息。我正在努力解决这个问题。我是一名新的ASP.NET开发人员,自从这是我的第一个关于它的项目以来,我一直在与这些概念作斗争。我在这个项目中使用Windows身份验证,我不确定使用QueryString是否可以,或者我应该使用会话变量。如果您能帮助我解决这个问题,这将非常有帮助。这里提供了一个非常详细和相关的教程,您可以使用CreateUserWizard1_NextButtonClick事件检查用户是否存在。