现在有个项目中,要实现数据库记录的更新,现在用这种方式
 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。
/*注*/  数据库表中都为非空字段(都有默认值)。

解决方案 »

  1.   

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

  2.   

    在不改变你代码的前提下,
    先实例化一个NewsModel类,然后通过这个类的某个方法给这个方法获取值,最后把要更新属性,在调用这个方法就是了。
    比如:
     NewsModel m=new NewsModel(id);//通过id获取数据,并给NewsModel的对应属性赋值
     m.Content =xxx;  //给要更新的属性赋个新的值
     m.updateTime=yyy;
     UpdateSingleCase(m);//然后调用这个方法就是了 ps:象你这种把数据库表对应到一个类时候,更新操作一般也就是全部更新所有字段的,这样这个更新的方法可以通用,做法没错。
      

  3.   

    回xray2005 但这样的话要进行两次数据库操作,有没有办法只进行一次库操作的办法
      

  4.   

    对于数据库的操作,还是直接操作效率高,我的做法是先建立一个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等等,从而自动完成数据库操作