首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#更新某字段,该如何处理

2012-01-14 
C#更新某字段现在有个项目中,要实现数据库记录的更新,现在用这种方式public void UpdateSingleCase(NewsMo

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();
}
}
catch (Exception ee)


{
MessageBox.Show(ee.Message);
 
}
return bResult;
}
}


然后在需要的地方,直接写sql语句,并调用该函数执行,如:
string strSql="update myTable set opName='wang' where id=1";
if(Tools.DoSql(strSql))
{
}
类似的,你可以写其他的一些代码,如Tools.GetValueTable,Tools.GetValueDataRow等等,从而自动完成数据库操作
[解决办法]

探讨


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

ps:象你这种把数据库表对应到一个类时候,更新操作一般也就…

热点排行