c#一步一步实现ORM(二)
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(二)的更多相关文章
- 一步一步跟我学DeviceOne开发 - 仿微信应用(一,二,三)
这是一个系列的文档,长期目标是利用DeviceOne开发一些目前使用广泛的优质手机应用,我们会最大化的实现这些应用的每一个功能和细节,不只停留在简单的UI模仿和Demo阶段,而是一个基本可以使用的实际 ...
- 一步一步来做WebQQ机器人-(二)(第一次登陆)
// 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...
- 如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单
阅读目录 前言 解决数据一致性的方案 回到DDD 设计 实现 结语 一.前言 之前的十一篇把用户购买商品并提交订单整个流程上的中间环节都过了一遍.现在来到了这最后一个环节,提交订单.单从业务上看,这个 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)
前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...
- 一步一步搭建oracle 11gR2 rac+dg之环境准备(二)【转】
一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg 之环境准备 (二) 一步一步搭建oracle 11gR2 rac+dg之环境准备 ...
- 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面
SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...
- 一步一步造个IoC轮子(二),详解泛型工厂
一步一步造个Ioc轮子目录 一步一步造个IoC轮子(一):Ioc是什么 一步一步造个IoC轮子(二):详解泛型工厂 一步一步造个IoC轮子(三):构造基本的IoC容器 详解泛型工厂 既然我说IoC容器 ...
- Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码
在文章:Mybatis源码解析,一步一步从浅入深(一):创建准备工程,中我们为了解析mybatis源码创建了一个mybatis的简单工程(源码已上传github,链接在文章末尾),并实现了一个查询功能 ...
- 一步一步开发Game服务器(三)加载脚本和服务器热更新(二)完整版
上一篇文章我介绍了如果动态加载dll文件来更新程序 一步一步开发Game服务器(三)加载脚本和服务器热更新 可是在使用过程中,也许有很多会发现,动态加载dll其实不方便,应为需要预先编译代码为dll文 ...
随机推荐
- CodeForces666E Forensic Examination
题目描述 给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数. 如有多解输出最靠前的那一个. 题解 ...
- 删除链表倒数第n个节点
题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链 ...
- Python读写文件的几种方式
一.pandas pandas模块是数据分析的大杀器,它使得对于文件相关的操作变得简单. 看一下它的简单使用 import pandas as pd # 读取 df = pd.read_csv('al ...
- Docker:macvlan实现容器跨主机通信 [十四]
一.什么是macvlan 1.macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址, 2.即多个 interface,每个 interface ...
- Hadoop记录- Yarn scheduler队列采集
#!/bin/sh ip=10.116.100.11 port=8088 export HADOOP_HOME=/app/hadoop/bin rmstate1=$($HADOOP_HOME/yarn ...
- Python3:关于列表的操作(合并、拼接,嵌套排序··)
一:# 将2个列表合并成字典,按最少个数key=['winnie','anna','lisa']value=[18,20,22] k_v=dict(zip(key,value))print(k_v) ...
- Angular7
1.绑定html 在ts里面自定义一个html变量 html = '<a> 这是html变量 </a> '; 在html打印出来 直接打印:{{html}} <br /& ...
- LeetCode 第五题 最长的回文字符串 (JAVA)
Longest Palindromic Substring 简介:字符串中最长的回文字符串 回文字符串:中心对称的字符串 ,如 mom,noon 问题详解: 给定一个字符串s,寻找字符串中最长的回文字 ...
- python 进程、线程与协程的区别
进程.线程与协程区别总结 - 1.进程是计算器最小资源分配单位 - 2.线程是CPU调度的最小单位 - 3.进程切换需要的资源很最大,效率很低 - 4.线程切换需要的资源一般,效率一般(当然了在不考虑 ...
- Pycharm新建模板默认添加作者时间等信息
在pycharm使用过程中,对于每次新建文件的shebang行和关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2. ...