日期:2014-05-18  浏览次数:20826 次

C#更新某字段
现在有个项目中,要实现数据库记录的更新,现在用这种方式
 public void UpdateSingleCase(NewsModel model)
  {
  StringBuilder strSql = new StringBuilder();
  strSql.Append("update News set ");
  strSql.Append("Title=@Title,");
  strSql.Append("SortId=@SortId,");
  strSql.Append("Content=@Content,");
  strSql.Append("AddTime=@AddTime,");
  strSql.Append("UpdateTime=@UpdateTime,");
  strSql.Append(" where ID=@ID");
  SqlParameter[] parameters = {
new SqlParameter("@ID", SqlDbType.Int,4),
new SqlParameter("@Title", SqlDbType.Int,4),
new SqlParameter("@SortId", SqlDbType.VarChar,100),
new SqlParameter("@Content", SqlDbType.VarChar,8000),
new SqlParameter("@AddTime", SqlDbType.DateTime)
new SqlParameter("@UpdateTime", SqlDbType.DateTime)
};
  parameters[0].Value = model.ID;
  parameters[1].Value = model.SortId;
  parameters[2].Value = model.Title;
  parameters[3].Value = model.Content;
  parameters[12].Value = model.AddTime;
  parameters[13].Value = model.UpdateTime;

  SqlHelper.ExecuteNonQuery(ConfigDbConn.Conn_DbContent_Dbo,CommandType.Text,strSql.ToString(),parameters);
现在的问题是只有传递全部参数时才能进行更新,我想实现只更新部分字段应该怎么办?
如,我只想更新Content 和updateTime。
/*注*/ 数据库表中都为非空字段(都有默认值)。

------解决方案--------------------
public void UpdateSingleCase(NewsModel model) 

StringBuilder strSql = new StringBuilder(); 
strSql.Append("update News set "); 
strSql.Append("UpdateTime=@UpdateTime,"); 
strSql.Append(" where ID=@ID"); 
SqlParameter[] parameters = { 
new SqlParameter("@ID", SqlDbType.Int,4),
new SqlParameter("@Content", SqlDbType.VarChar,8000), 
new SqlParameter("@UpdateTime", SqlDbType.DateTime) 
}; 
parameters[0].Value = model.ID; ; 
parameters[1].Value = model.Content; 
parameters[2].Value = model.UpdateTime; 

SqlHelper.ExecuteNonQuery(ConfigDbConn.Conn_DbContent_Dbo,CommandType.Text,strSql.ToString(),parameters); 

------解决方案--------------------


在不改变你代码的前提下,
先实例化一个NewsModel类,然后通过这个类的某个方法给这个方法获取值,最后把要更新属性,在调用这个方法就是了。
比如:
 NewsModel m=new NewsModel(id);//通过id获取数据,并给NewsModel的对应属性赋值
 m.Content =xxx; //给要更新的属性赋个新的值
 m.updateTime=yyy;
 UpdateSingleCase(m);//然后调用这个方法就是了 

ps:象你这种把数据库表对应到一个类时候,更新操作一般也就是全部更新所有字段的,这样这个更新的方法可以通用,做法没错。
------解决方案--------------------
对于数据库的操作,还是直接操作效率高,我的做法是先建立一个static函数:
public class Tools
{
public static bool DoSql(string p_strSql)
{
if (p_strSql.Trim().Length == 0)
return true;
bool bResult = true;
try
{
using (SqlConnection aConnect = new SqlConnection("server=…………"))
{
aConnect.Open();
using (SqlCommand myCommand = new SqlCommand(p_strSql, aConnect))
{
myCommand.ExecuteNonQuery();
}
aConnect.Close();
}
}