我有一个应该编辑数据库中信息的表单。首先,我使用URL参数查询数据库以获取记录并将其显示在文本框中,以便我可以更新它们。代码的那部分工作问题是当我按下提交以更改文本框上的内容后更新数据。只有LastMod
列才会更新。我认为page_load
会触发两次并覆盖按钮点击事件触发前文本框上的内容。
这是代码。
public partial class Edit : System.Web.UI.Page
{
int aID;
SqlConnection conn = new SqlConnection(@connectionstring);
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
conn.Open();
aID = Convert.ToInt16(Request.QueryString["ID"]);
string sql = "select * from Contacts where ID = '" + aID + "' ";
SqlDataAdapter adap = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
adap.Fill(ds);
txtFName.Text = ds.Tables[0].Rows[0]["Fname"].ToString();
txtLName.Text = ds.Tables[0].Rows[0]["Lname"].ToString();
txtEmail.Text = ds.Tables[0].Rows[0]["EmailAdd"].ToString();
lblLastMod.Text = ds.Tables[0].Rows[0]["LastMod"].ToString();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DateTime date = DateTime.Now;
SqlCommand sqlComm = new SqlCommand();
sqlComm = conn.CreateCommand();
sqlComm.CommandText = @"UPDATE Contacts SET Fname=@FName, Lname = @LName, EmailAdd = @Eadd,LastMod = @LMod WHERE ID=@ID";
sqlComm.Parameters.Add("@FName", SqlDbType.NChar);
sqlComm.Parameters["@FName"].Value = txtFName.Text.Trim();
sqlComm.Parameters.Add("@LName", SqlDbType.NChar);
sqlComm.Parameters["@LName"].Value = txtLName.Text.Trim();
sqlComm.Parameters.Add("@Eadd", SqlDbType.NChar);
sqlComm.Parameters["@Eadd"].Value = txtEmail.Text.Trim();
sqlComm.Parameters.Add("@LMod", SqlDbType.DateTime);
sqlComm.Parameters["@LMod"].Value = date;
sqlComm.Parameters.Add("@ID", SqlDbType.Int);
sqlComm.Parameters["@ID"].Value = aID;
conn.Open();
sqlComm.ExecuteNonQuery();
conn.Close();
}
}
我尝试在!IsPostback
方法中添加Page_Load
,但即使LastMod
记录也没有更新。
感谢您的帮助。
答案 0 :(得分:2)
您在页面顶部声明了一个变量aID,并在页面加载中设置了一个值。然后你也可以在点击中使用它,但你永远不会重新设置它。因此,对于回发,它将没有值。将其移至“if not ispostback”
上方的页面加载protected void Page_Load(object sender, EventArgs e)
{
aID = Convert.ToInt16(Request.QueryString["ID"]);
if (!IsPostBack)
{
conn.Open();
string sql = "select * from Contacts where ID = '" + aID + "' ";