我正在尝试为Web应用程序的管理员开发一个简单的用户管理系统。我正在使用ASP.NET Wizard Control执行此任务。 我只是放了一个用于编写用户名的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);
}
}
}
我尝试通过在TextBox中编写任何用户名来测试这一点,但是当我单击向导的Next按钮时我没有得到任何结果,该按钮应该将我重定向到占位符或任何应该显示用户的控件信息。我现在想要的只是显示用户的信息,如果他的用户名存在于数据库中。怎么做?
答案 0 :(得分:0)
首先,您需要了解页面加载和回发的概念。每次加载页面时,通过在浏览器中输入URL或通过按钮单击事件,将在Page_Load中编写的代码执行。您应该只在
中放置要执行一次的代码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;