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

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());
        }
    }
时间: 2024-11-10 01:13:34

通用的通过模型插入或更新数据库的相关文章

EF数据迁移(当模型改变时更新数据库)

https://msdn.microsoft.com/zh-CN/data/jj591621 Enable-Migrations Add-Migration 名称 Update-Database –Verbose

MyBatis动态批量插入、更新Mysql数据库的通用实现方案

一.业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作, 关于数据源的切换可以参考之前的文章<spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource.atomikos.JTA实现多数据源灵活切换以及分布式事务管理> 二.批量插入的具体实现 1.查询需要同步的数据: @Aut

关于数据库优化3——在数据库插入、更新大量数据的性能优化

在真实的业务场景中,我们肯定是遇到过有时候需要大批量的数据要进行入库或者是更新.这时候我们在执行这种插入,或者是更新的时候肯定会遇到数据库效率的问题,我们首先能想到的是让事物尽量保持一致,统一去提交事务,这样肯定会有一定的效率提示. ok.在我们在考虑了这个事情之后,我们可以在来看一下表里是否存在索引,如果存在索引,我们可以做一个这样的操作:首先在插入大量数据的时候,先把索引废除掉,等插入完成后在把索引重新建立.我在这里做了一个简单的实验,整理了一下实验的结果,有了下面的一个执行效率的图. 实验

django修改模型后更新数据库

当django改变模型过后,需要重新更新数据库,更新方法如下 比如app的名字是rango python manage.py makemigrations rango(创建迁移脚本)  然后运行  python manage.py migrate

System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

System.InvalidOperationException: 支持"XXX"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269). EF发布时遇到的问题(数据库初始化 http://www.cr173.com/html/17941_1.html) public ZujuanWebSiteDataEntities() : base("cloud_

VC++对Access数据库的操作(查询、插入、更新、删除等)

Microsoft Office Access是由微软发布的关系数据库管理系统.Access数据库常应用于小型软件系统中,比如:生产管理.销售管理.库存管理等各类企业管理软件,其最大的优点是:简单易学.使用灵活. 下面我们结合实例来详细说明,在VC++ MFC中,如何使用Access数据库文件进行数据的存储,如何实现对数据库中数据的查询.插入.更新和删除等操作. (实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/8235865

支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269). 解决了,把数据库中检测模型变化的表(如上图所示)删除就可以了

数据库中表的插入、更新、删除

数据库的表中最常见的操作就是插入.更新啊和删除.下面我们一一介绍一下: 1. 插入 insert 使用的模板语句时insert into 表明 values. 例如: insert有如下几点需要注意: 1)insert into-select可以把查找的结果插入到另一个表中: 2)插入的数据必须和表中的字段类型相同,或者可以被隐式转换: 2. 更新 update 更新就是把已经存在的数据修改更新一下. 例子: 更新有如下几点需要注意: 1)如果没有where做限制,那么默认更新所有数据: 2)修

MySQL数据库基础(六)——SQL插入、更新、删除操作

MySQL数据库基础(六)--SQL插入.更新.删除操作 一.插入数据 1.为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值. INSERT INTO table_name (column_list) VALUES (value_list); insert into `TSubject` (subjectID,subjectName,BookName,Publisher) values ('0004','英语','大学英语走遍美国','清华出版社')