更新查询后值不会更新

时间:2012-03-11 12:59:10

标签: sql sql-server-2005

我正在使用c#和SQL Server 2005作为后端在ASP.NET中开发一个项目。它包含一个页面profile.aspx,用于显示数据库中用户的信息。会话变量用于跟踪当前登录的用户。

数据库中的profiles表包含username列和其他10个列,如dept, address, contact, skills, interests等。

我在profile.aspx上显示所有这些值。另一个页面是edit_profile.aspx,当点击profile.aspx上的编辑按钮时会出现该页面。此处数据显示在文本框中,已显示较旧的条目(可以编辑),然后单击Update按钮进行确认。

更新查询运行正常,没有错误,但值不是数据库表中的更新。可能的原因是什么?溶液

谢谢


protected void Page_Load(object sender, EventArgs e)
{
    string CNS = ConfigurationManager.ConnectionStrings["myconn"].ToString();
    SqlConnection con = new SqlConnection(@CNS);
    SqlDataAdapter sda = new SqlDataAdapter("select * from profiles where username='" +     Session["currentusername"].ToString()+"'", con);
    DataSet ds = new DataSet();
    sda.Fill(ds, "profiles");
    txt_name.Text = ds.Tables["profiles"].Rows[0][0].ToString();
    txt_deptt.Text = ds.Tables["profiles"].Rows[0][1].ToString();
    txt_qualificatns.Text = ds.Tables["profiles"].Rows[0][2].ToString();
    txt_add.Text = ds.Tables["profiles"].Rows[0][3].ToString();
    txt_contacts.Text = ds.Tables["profiles"].Rows[0][4].ToString();
    txt_interests.Text = ds.Tables["profiles"].Rows[0][5].ToString();
    txt_awards.Text = ds.Tables["profiles"].Rows[0][6].ToString();
    txt_website.Text = ds.Tables["profiles"].Rows[0][7].ToString();
    txt_skills.Text = ds.Tables["profiles"].Rows[0][8].ToString();
    txt_mstatus.Text = ds.Tables["profiles"].Rows[0][9].ToString();
    ds.Reset();
}



protected void Button1_Click(object sender, EventArgs e)
{
    string CNS = ConfigurationManager.ConnectionStrings["myconn"].ToString();
    SqlConnection con = new SqlConnection(@CNS);
    SqlCommand sda = new SqlCommand("update profiles set department='"+txt_deptt.Text+"',qualifications='"+txt_qualificatns.Text+"', address='"+txt_add.Text+"', contacts='"+txt_contacts.Text+"', interests='"+txt_interests.Text+"', awards='"+txt_awards.Text+"', website='"+txt_website.Text+"', skills='"+txt_skills.Text+"', mstatus='"+txt_mstatus.Text+"' where username='" + Session["currentusername"].ToString() + "'", con);
    DataSet ds = new DataSet();
    try
    {
        con.Open();
        int temp=sda.ExecuteNonQuery();
        con.Close();
        if (temp >= 1)
        {
            lbl_message.ForeColor = System.Drawing.Color.Green;
            lbl_message.Text = "Profile Updated Successfully!";
        }
        else
        {
            lbl_message.ForeColor = System.Drawing.Color.Red;
            lbl_message.Text = "Integer less than 1";
        }

    }
    catch
    {
        lbl_message.ForeColor = System.Drawing.Color.Red;
        lbl_message.Text = "Try Again Later, An Error Occured!";
    }
    //Response.Redirect("profile.aspx");
}

}

1 个答案:

答案 0 :(得分:0)

每次页面加载时,您都会覆盖文本框的内容,因此用户输入的conntet永远不会写入数据库......

查看Page.IsPostBack方法。基本上,用

包装命令来填充文本框
if (!Page.IsPostBack) {}

要仅在第一次加载页面时将值加载到文本框中(因此,当您单击按钮时不要覆盖用户输入的值,您需要检查页面是否不是回发。

我想也许一本关于基础ASP.Net的书将有助于回答你早期可能遇到的许多问题。

protected void Page_Load(object sender, EventArgs e)
{
 if (!Page.IsPostBack) {
    string CNS = ConfigurationManager.ConnectionStrings["myconn"].ToString();
    SqlConnection con = new SqlConnection(@CNS);
    SqlDataAdapter sda = new SqlDataAdapter("select * from profiles where username='" +     Session["currentusername"].ToString()+"'", con);
    DataSet ds = new DataSet();
    sda.Fill(ds, "profiles");
    txt_name.Text = ds.Tables["profiles"].Rows[0][0].ToString();
    txt_deptt.Text = ds.Tables["profiles"].Rows[0][1].ToString();
    txt_qualificatns.Text = ds.Tables["profiles"].Rows[0][2].ToString();
    txt_add.Text = ds.Tables["profiles"].Rows[0][3].ToString();
    txt_contacts.Text = ds.Tables["profiles"].Rows[0][4].ToString();
    txt_interests.Text = ds.Tables["profiles"].Rows[0][5].ToString();
    txt_awards.Text = ds.Tables["profiles"].Rows[0][6].ToString();
    txt_website.Text = ds.Tables["profiles"].Rows[0][7].ToString();
    txt_skills.Text = ds.Tables["profiles"].Rows[0][8].ToString();
    txt_mstatus.Text = ds.Tables["profiles"].Rows[0][9].ToString();
    ds.Reset();
}
}