将文本框数据更新为SQLSERVER的问题

时间:2011-06-03 10:12:29

标签: asp.net sql-server

我在通过asp:TextBox更新用户配置文件时遇到问题。 在页面加载时,所有文本框都从数据库sqlserver加载了正确的值。

说First name = SAM {即SAM显示在txtName的文本字段中) 和姓氏= Berton

但是当我将txtName的内容改为SAMANTHA时 和其他文本框类似,并点击更新配置文件按钮,内部txtName.text =“SAM”保留,尽管txtName.text =“SAMANTHA”的内容已更改,通过手动更改文本框的内容。所以相同的值是“SAM” “存储到sqlserver而不是”SAMANTHA“。

protected void Page_Load(object sender, EventArgs e)
    {

        loadProfileData();
    }
protected void loadProfileData()
    {

        string connStringProfileload = ConfigurationManager.ConnectionStrings["myconnString"].ConnectionString;
        SqlConnection conProfLoad = new SqlConnection(connStringProfileload);
        conProfLoad.Open();
        string emailAddLogin = User.Identity.Name.ToString();
        string strSqlProfileLoad = "SELECT * FROM [gen_profile] WHERE [email]=@email";

        SqlCommand cmd = new SqlCommand(strSqlProfileLoad, conProfLoad);
        cmd.Parameters.AddWithValue("@email", emailAddLogin);
        SqlDataReader drProfileLoad = cmd.ExecuteReader();
        while (drProfileLoad.Read())
        {
            txtName.Text = drProfileLoad["fname"].ToString();
            txtLastName.Text=drProfileLoad["lname"].ToString();


        }

        drProfileLoad.Close();
        conProfLoad.Close();
    }

protected void BtnUpdtProf_Click(object sender, EventArgs e)
    {
        string connStringProfileUpdate = ConfigurationManager.ConnectionStrings["myconnString"].ConnectionString;
        SqlConnection conUpdateProf = new SqlConnection(connStringProfileUpdate);
        conUpdateProf.Open();
        string emailAddLogin = User.Identity.Name.ToString();
        string strSqlUpdateProf = "UPDATE  gen_profile SET fname =@fname, lname =@lname where email=@email;";

        SqlCommand cmdUpdate = new SqlCommand(strSqlUpdateProf, conUpdateProf);
        cmdUpdate.Parameters.AddWithValue("@fname", txtName.Text.ToUpper().Trim());
        cmdUpdate.Parameters.AddWithValue("@lname", txtLastName.Text.ToUpper().Trim());

        cmdUpdate.Parameters.AddWithValue("@email", emailAddLogin);



        int i = cmdUpdate.ExecuteNonQuery();
        conUpdateProf.Close();
        if (i == 1)
            Response.Redirect("~/prof/resp_update_prof.aspx");
    }

2 个答案:

答案 0 :(得分:3)

更改此方法:

protected void Page_Load(object sender, EventArgs e) {
    loadProfileData();
}

到:

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) loadProfileData();
}

基本上,您的textBox值正在页面加载事件中重置,因此每次页面回发时,它都会重置文本框中的值,然后将它们保存回数据库。

答案 1 :(得分:0)

这是因为在你的按钮点击事件之前,会触发page_load,重新填充文本框。

您可以通过检查回复来阻止这种情况发生,如下所示:

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) 
    {
        loadProfileData();
    }
}