数据库更新数据时的传值问题

如果数据库中有多列值时,但是不定个数更新是需要采取“先通过查找数据库中的所有数据保存为一个model类,再给相应要改变的值复制,其他的更新的值保持原有数据不变”

比如:DAL(数据访问层)

  /// <summary>
        /// 更新数据,虽然有的时候只是更新某个值,其他的值可以原样更新。在更新之前先要查询一下原有的数据,以便于不更新没必要的更新
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public int Updata(TblPerson model)
        {
            string sql = "update dbo.TblPerson set uName=@name,age=@age,height=@height,gender=@gender where autoId=@id";
            SqlParameter[] sps = new SqlParameter[] { 
            new SqlParameter("@name",model.uName),
            new SqlParameter("@age",model.age),
            new SqlParameter("@height",model.height==null?DBNull.Value:(object)model.height),
            new SqlParameter("@gender",model.gender==null?DBNull.Value:(object)model.gender),
            new SqlParameter("@id",model.autoId)
            };
            return SqlHelper.ExecureNonQuery(sql,CommandType.Text,sps);
        }

        /// <summary>
        /// 通过autoId查询相关项的数据,并且返回model类
        /// </summary>
        /// <param name="autoId"></param>
        /// <returns></returns>
        public TblPerson GetModelById(int autoId)
        {
            string sql = "select * from TblPerson where autoId=@id";
            TblPerson model = new TblPerson();
            using (SqlDataReader sdr = SqlHelper.ExecuteReader(sql, CommandType.Text, new SqlParameter("@id", autoId)))
            {
                if (sdr.HasRows)
                {
                    if (sdr.Read())
                    {

                        model.autoId = sdr.GetInt32(0);
                        model.uName = sdr.GetString(1);
                        model.age = sdr.GetInt32(2);
                        model.height = sdr.IsDBNull(3) ? null : (int?)sdr.GetInt32(3);
                        model.gender = sdr.IsDBNull(4) ? null : (bool?)sdr.GetBoolean(4); 
                    }
                }
                else
                {
                    model = null;
                }
            }
            return model;
        }

BLL (业务逻辑层)

   public int Updata(TblPerson model)
        {
            return dal.Updata(model);
        }

        public TblPerson GetModelById(int autoId)
        {
            return dal.GetModelById(autoId);
        }

UI(应用层)

 private void button1_Click(object sender, EventArgs e)
        {
            TblPersonBll bll = new TblPersonBll();
            int id =Convert.ToInt32(textBox1.Text.Trim());
            TblPerson model = bll.GetModelById(id);


            model.autoId = id;
            model.uName = "张三";
            int r= bll.Updata(model);
            MessageBox.Show("更新"+r+"");
        }


 

转载于:https://www.cnblogs.com/wuzaishijie/p/4856013.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值