c#一步一步实现ORM(二)

上一篇描述了简单的思路,这一片我们来稍微细化一下

1插入的时候忽略某些字段

       public int Insert<T>(T o, params string[] except)
{ //有时候我们添加的时候只想添加部分字段,或者有的字段是自增的方式,那么要去掉这个字段(在sqlserver里面是这样,在mysql里面 是插入 null) try
{ Type type = typeof(T);
var tablename = "dbo.[" + typeof(T).Name + "]"; string fields = "";
string values = "";
List<SqlParameter> paras = new List<SqlParameter>(); object v = null;
foreach (var item in type.GetProperties())
{ bool flag = true; if (except != null && except.Contains(item.Name))
{ flag = false;
} if (flag)
{
v = item.GetValue(o, null);
if (v != null)
{
fields += "," + "[" + item.Name + "]";
values += ",@" + item.Name;
paras.Add(new SqlParameter("@" + item.Name, v));
}
}
}
string sql = string.Format("insert into {0} ({1}) values({2})", tablename, fields.Substring(1), values.Substring(1)); return ExcuteSql(sql, paras);
}
catch (Exception e)
{
Console.Write(e.ToString());
return 0;
} }

2批量插入

       public int InsertArray<T>(IEnumerable<object> o, params string[] except)
{
if (o.Count() == 0)
{ return 0;
} Type type = typeof(T);
var tablename = "dbo.[" + typeof(T).Name + "]";
List<SqlParameter> paras = new List<SqlParameter>(); string sql = ""; int count = 0;
foreach (var i in o)
{
count++;
string fields = "";
string values = ""; //object v = null;
foreach (var item in type.GetProperties())
{ bool flag = false; if (!flag)
{
var vitem = item.GetValue(i, null); if (vitem != null)
{
fields += ",[" + item.Name + "]";
values += ",@" + count + item.Name; paras.Add(new SqlParameter("@" + count + item.Name, vitem));
}
} } sql += string.Format("insert into {0} ({1}) values({2});", tablename, fields.Substring(1), values.Substring(1));
} return ExcuteSql(sql, paras); }

  

   private int ExcuteSql(string sql, IEnumerable<SqlParameter> paras)
{
using (SqlConnection conn = new SqlConnection(this.sqlConnStr))
{ SqlCommand cmd = new SqlCommand();
cmd.Connection = conn; cmd.CommandText = sql; cmd.Parameters.AddRange(paras.ToArray()); conn.Open();
int flag = 0;
try
{ flag = cmd.ExecuteNonQuery(); }
catch (Exception e)
{
throw e; }
conn.Close();
return flag;
}
}

  下一篇我们开始学习修改,删除,和解析lambda表达式

c#一步一步实现ORM(二)的更多相关文章

  1. 一步一步跟我学DeviceOne开发 - 仿微信应用(一,二,三)

    这是一个系列的文档,长期目标是利用DeviceOne开发一些目前使用广泛的优质手机应用,我们会最大化的实现这些应用的每一个功能和细节,不只停留在简单的UI模仿和Demo阶段,而是一个基本可以使用的实际 ...

  2. 一步一步来做WebQQ机器人-(二)(第一次登陆)

    // 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...

  3. 如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单

    阅读目录 前言 解决数据一致性的方案 回到DDD 设计 实现 结语 一.前言 之前的十一篇把用户购买商品并提交订单整个流程上的中间环节都过了一遍.现在来到了这最后一个环节,提交订单.单从业务上看,这个 ...

  4. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)

    前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...

  5. 一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】

    一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg 之环境准备 (二) 一步一步搭建oracle 11gR2 rac+dg之环境准备 ...

  6. 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

    SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...

  7. 一步一步造个IoC轮子(二),详解泛型工厂

    一步一步造个Ioc轮子目录 一步一步造个IoC轮子(一):Ioc是什么 一步一步造个IoC轮子(二):详解泛型工厂 一步一步造个IoC轮子(三):构造基本的IoC容器 详解泛型工厂 既然我说IoC容器 ...

  8. Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码

    在文章:Mybatis源码解析,一步一步从浅入深(一):创建准备工程,中我们为了解析mybatis源码创建了一个mybatis的简单工程(源码已上传github,链接在文章末尾),并实现了一个查询功能 ...

  9. 一步一步开发Game服务器(三)加载脚本和服务器热更新(二)完整版

    上一篇文章我介绍了如果动态加载dll文件来更新程序 一步一步开发Game服务器(三)加载脚本和服务器热更新 可是在使用过程中,也许有很多会发现,动态加载dll其实不方便,应为需要预先编译代码为dll文 ...

随机推荐

  1. pgsql 执行建库脚本时候出现ERROR: relation "xxx_id_seq" does not exist

    1. 问题: ERROR: relation "xxx_id_seq" does not exist 2. 出现原因:由于表中建立了自增字段,id定义为Serial 类型,当执行完 ...

  2. shapeit提取或去除指定SNP和样本(shapeit extract or exclude SNP, sample)

    shapeit最大的功能是对双链DNA进行phase和基因型进行impute.除此之外,还能提取SNP和样本,同样的,也能去除SNP和样本.下面简单介绍这两个功能. 一.提取SNP 提取SNP用到“- ...

  3. 面试:atoi() 与 itoa()函数的内部实现(转)

    原 面试:atoi() 与 itoa()函数的内部实现 2013年04月19日 12:05:56 王世晖 阅读数:918   #include <stdio.h> #include < ...

  4. Love Me,Love My Dog

    Love me, love my dog. 爱屋及乌. 出处<尚书大传•大战>:“爱人者,兼其屋上之乌.” 活学活用:love first love 初恋 unrequited [one- ...

  5. mvc 返回一个对象 到视图接收

    public ActionResult InfoFrame() { List<Users> list = new List<Users>(); Users user = new ...

  6. Java并发之Thread类的使用

    一.线程的几种状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wa ...

  7. mybatis查询语句获取自增主键

    第一种方式: 主键回填useGeneratedKeys 代表采用JDBC的Statment对象的getGeneratedKeys方法返回主键keyProperty 代表将用哪个POJO的属性去匹配这个 ...

  8. ansible入门及组件介绍

    Ansible简介 Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置.批量程序部署.批量运行命令等功能.Ansible是基于模块工作的,ansible提供一个框架,通过模块实 ...

  9. pythonのdjango连接MYSQL

    在py3.*中利用django使用mysql时,会出现一些问题.由于django默认的是 MySQLdb,但MySQLdb目前不支持py3.*所以我们要改用pymysql,首先要安装pymysql,命 ...

  10. C#学习笔记-域用户认证(一)

    public Boolean ValidateDomainUser(string Domain, string UserName, string Password) { DirectoryEntry ...