通用的通过模型插入或更新数据库

Posted 秋风思红叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用的通过模型插入或更新数据库相关的知识,希望对你有一定的参考价值。

public class DALInsertUpdate<T> where T : new()
    {
        /// <summary>
        /// 通过模型把非(KeyAttribute)属性插入到指定表
        /// </summary>
        /// <param name="TableName">要插入到的表名</param>
        /// <param name="Model">要插入的模型</param>
        /// <returns></returns>
        public int Insert(string TableName, T Model)
        {
            var Name = new StringBuilder();
            var Value = new StringBuilder();
            var Parame = new List<SqlParameter>();
            PropertyInfo[] propertys = Model.GetType().GetProperties();
            foreach (var item in propertys)
            {
                if (null==item.GetCustomAttribute(typeof(KeyAttribute)))
                {
                    Name.Append(item.Name).Append(",");
                    Value.Append("@").Append(item.Name).Append(",");
                    Parame.Add(new SqlParameter("@"+item.Name,item.GetValue(Model, null)));
                }
            }
            Name.Remove(Name.Length - 1, 1);
            Value.Remove(Value.Length - 1, 1);
            string Sql = string.Format("INSERT INTO {0} ({1})VALUES({2})", TableName, Name.ToString(), Value.ToString());
            return SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(), CommandType.Text, Sql.ToString(), Parame.ToArray());

        }
        /// <summary>
        /// 通过模型更新指定(KeyAttribute)属性所指向的记录
        /// </summary>
        /// <param name="TableName">要更新的表名</param>
        /// <param name="Model">要更新的模型</param>
        /// <returns></returns>
        public int Update(string TableName, T Model)
        {
            PropertyInfo[] propertys = Model.GetType().GetProperties();
            var str = new StringBuilder();
            var where =new StringBuilder("");
            var Parame = new List<SqlParameter>();
            foreach (var item in propertys)
            {
                if (null!=item.GetCustomAttribute(typeof(KeyAttribute)))
                {
                    where.Append(item.Name).Append("=").Append("@").Append(item.Name);
                    Parame.Add(new SqlParameter("@" + item.Name, item.GetValue(Model, null)));
                    
                }
                else
                {
                    str.Append(item.Name).Append("[email protected]").Append(item.Name).Append(",");
                    Parame.Add(new SqlParameter("@" + item.Name, item.GetValue(Model, null)));
                }
            }
            str.Remove(str.Length - 1, 1);
            if (string.IsNullOrEmpty(where.ToString())) throw new Exception("没有找到PrimaryKey,无法更新数据库!");
            string sql = string.Format("UPDATE {0} SET {1} WHERE {2} ", TableName, str.ToString(), where.ToString());
            return SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(), CommandType.Text, sql.ToString(), Parame.ToArray());
        }
    }

 

以上是关于通用的通过模型插入或更新数据库的主要内容,如果未能解决你的问题,请参考以下文章

(错误)SQL 代码 -530,错误外键 PAY$ID$U 的插入或更新值无效

从片段向数据库中插入值时ListView不更新

Laravel 8 无法在某个表中插入或更新数据

存储更新、插入或删除语句影响了意外数量的行

教程4 - 验证和权限

Mybatis增删改查(注解通用Mapperxml)入门小白快收藏!