更新的时候往往只更新一部分字段,而往往存储过程却将所有需要更新的地方都写进sql语句中,这样为了方便不同的更新操作可以使用同一存储过程。但更新的时即使只更新一个字段,也需要得到所有字段。
以前通过对象得到其属性,在程序里面给每个属性赋值。需要在每个要更新的地方都麻烦的赋值一次。
有没有更好的方法呢?
有,如果把这个赋值的过程放到这个对象的实体类中,只需要在更新之前得到这个实体类,便可以得到里面所有的值,然后更改要更新的字段即可,代码量减少,并且是面向对象的思维在做程序,但必然要在更新前查询一次 系统性能减慢。
下面以“论坛帖子”更新“排序号”为例,Subject su = new Subject(Id); 根据Id 得到这个对象的实体,便得到所有字段的值,不需要像以前su.Title = title类似的去赋值了。是不是很方便呢?
private void Dg_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int Id = Convert.ToInt32(this.Dg.DataKeys[e.Item.ItemIndex].ToString());
Subject su = new Subject(Id);
su.OrderBy = int.Parse(((TextBox)e.Item.Cells[6].Controls[0]).Text);
su.Update();
Dg.EditItemIndex = -1;
DgBind();
}
{
int Id = Convert.ToInt32(this.Dg.DataKeys[e.Item.ItemIndex].ToString());
Subject su = new Subject(Id);
su.OrderBy = int.Parse(((TextBox)e.Item.Cells[6].Controls[0]).Text);
su.Update();
Dg.EditItemIndex = -1;
DgBind();
}
在来看看实体类里是怎么写的吧!在这里通过查询DataTable dt = dp.SelectSubject(id);得到所有字段的值
public Subject(int id)
{
DataTable dt = dp.SelectSubject(id);
if(dt.Rows.Count ==1)
{
_id = Convert.ToInt32(dt.Rows[0]["suId"]);
_title = dt.Rows[0]["suTitle"]==null?"":dt.Rows[0]["suTitle"].ToString();
_userId = Convert.ToInt32(dt.Rows[0]["suUserId"]);
_forumType = Convert.ToInt32(dt.Rows[0]["suType"]);
_createDate = Convert.ToDateTime(dt.Rows[0]["suCreateDate"]);
_content = dt.Rows[0]["suContent"].ToString();
_state = Convert.ToInt32(dt.Rows[0]["suState"]);
_info1 = dt.Rows[0]["suInfo1"]==null?"":dt.Rows[0]["suInfo1"].ToString();
_info2 = dt.Rows[0]["suInfo2"].ToString();
_BigType = dt.Rows[0]["suBigType"]==null?"": dt.Rows[0]["suBigType"].ToString();
_orderBy = Convert.ToInt32(dt.Rows[0]["suOrderBy"].ToString());
}
}
{
DataTable dt = dp.SelectSubject(id);
if(dt.Rows.Count ==1)
{
_id = Convert.ToInt32(dt.Rows[0]["suId"]);
_title = dt.Rows[0]["suTitle"]==null?"":dt.Rows[0]["suTitle"].ToString();
_userId = Convert.ToInt32(dt.Rows[0]["suUserId"]);
_forumType = Convert.ToInt32(dt.Rows[0]["suType"]);
_createDate = Convert.ToDateTime(dt.Rows[0]["suCreateDate"]);
_content = dt.Rows[0]["suContent"].ToString();
_state = Convert.ToInt32(dt.Rows[0]["suState"]);
_info1 = dt.Rows[0]["suInfo1"]==null?"":dt.Rows[0]["suInfo1"].ToString();
_info2 = dt.Rows[0]["suInfo2"].ToString();
_BigType = dt.Rows[0]["suBigType"]==null?"": dt.Rows[0]["suBigType"].ToString();
_orderBy = Convert.ToInt32(dt.Rows[0]["suOrderBy"].ToString());
}
}