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