更新的值不会存储在文本框中

时间:2015-08-19 11:17:29

标签: c# asp.net

    protected void Page_Load(object sender, EventArgs e)
    {
        cnst = "Data Source=IBM369-R9WAKY5;Initial Catalog=anudatabase;Integrated Security=True";
        cn = new SqlConnection(cnst);

        cn.Open();
        st = "select * from patient_db where unique_id = 123";
        cmd = new SqlCommand(st, cn);
        dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            Label9.Text = dr.GetString(1);
            Label10.Text = dr.GetInt16(2).ToString();
            Label11.Text = dr.GetString(6);
            Label12.Text = dr.GetString(7);
            TextBox1.Text = dr.GetString(3);
            TextBox2.Text = dr.GetDecimal(4).ToString();

        }
        cn.Close();
    }

//按钮点击功能

protected void Button1_Click(object sender, EventArgs e)
    {
        cn.Open();           
        st = "update patient_db set address ='" + TextBox1.Text + "' ,phone=" + TextBox2.Text+"where unique_id=123";
        cmd = new SqlCommand(st, cn);
        int result2 = cmd.ExecuteNonQuery();

        if (Convert.ToBoolean(result2))
        {
            result1.Text = "details updated successfully";
        }
        cn.Close();
    }

在从数据库中为文本框分配值之后,如果我在文本框中键入了一些其他新值,它没有采用新值,它仍然保留旧值。我知道原因和解决方法?提前谢谢

3 个答案:

答案 0 :(得分:4)

编写方法LoadData,将代码从page_load移动到此方法中。然后从包含在if(!IsPostBack)中的page_load调用此方法 - 检查。在更新了值后,也可以通过按钮单击事件处理程序调用此方法。

private void LoadData()
{
    using (var cn = new SqlConnection("Data Source=IBM369-R9WAKY5;Initial Catalog=anudatabase;Integrated Security=True"))
    {
        cn.Open();
        using(var cmd = new SqlCommand("select * from patient_db where unique_id = 123", cn))
        using (var dr = cmd.ExecuteReader())
        {
            if (dr.Read())
            {
                Label9.Text = dr.GetString(1);
                Label10.Text = dr.GetInt16(2).ToString();
                Label11.Text = dr.GetString(6);
                Label12.Text = dr.GetString(7);
                TextBox1.Text = dr.GetString(3);
                TextBox2.Text = dr.GetDecimal(4).ToString();
            }
        }
    }
}    

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


protected void Button1_Click(object sender, EventArgs e)
{
    // ... update
    LoadData();
}

重要说明:

  • 同样对using或{datalader}实现IDisposable的每个对象使用connection - 语句。这样就可以正确处理所有非托管资源。即使出现错误。
  • 如果123只是一个示例,实际上是用户提供的值,则使用sql-parameters来阻止sql-injection。不,永远使用它们。

答案 1 :(得分:0)

IsPostBack方式添加Page_Load控件。因为在Button_Click事件Page_Load事件发生之前。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        cnst = "Data Source=IBM369-R9WAKY5;Initial Catalog=anudatabase;Integrated Security=True";
        cn = new SqlConnection(cnst);

        cn.Open();
        st = "select * from patient_db where unique_id = 123";
        cmd = new SqlCommand(st, cn);
        dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            Label9.Text = dr.GetString(1);
            Label10.Text = dr.GetInt16(2).ToString();
            Label11.Text = dr.GetString(6);
            Label12.Text = dr.GetString(7);
            TextBox1.Text = dr.GetString(3);
            TextBox2.Text = dr.GetDecimal(4).ToString();
        }
        cn.Close();
    }
}

答案 2 :(得分:0)

您需要检查页面中的page.Ispostback属性。 这是你的代码。

protected void Page_Load(object sender, EventArgs e)
{
  if(!Page.IsPostBack)
  {
    cnst = "Data Source=IBM369-R9WAKY5;Initial Catalog=anudatabase;Integrated Security=True";
    cn = new SqlConnection(cnst);

    cn.Open();
    st = "select * from patient_db where unique_id = 123";
    cmd = new SqlCommand(st, cn);
    dr = cmd.ExecuteReader();
    if (dr.Read())
    {
        Label9.Text = dr.GetString(1);
        Label10.Text = dr.GetInt16(2).ToString();
        Label11.Text = dr.GetString(6);
        Label12.Text = dr.GetString(7);
        TextBox1.Text = dr.GetString(3);
        TextBox2.Text = dr.GetDecimal(4).ToString();

    }
    cn.Close();
   }
}

当您点击按钮时,它将首先调用PageLoad事件。所以它会再次将旧值设置为文本框,然后它将调用update方法。因此Update方法会将旧值更新为数据库。