ORM的增删查
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.ComponentModel.DataAnnotations;
using MODEL;
using Dapper;
namespace DAL
{
public class ORMHelper: ConfigurationBaseDal
{
#region 批量查询
/// <summary>
/// 数据库链接字符串
/// </summary>
private static string SQLStr = "Data Source=.;Initial Catalog=Students;Persist Security Info=True;User ID=sa;Password=root;";
public List<T> GetAll<T>() where T : class, new()//定义一个泛型,和泛型约束
{
string sqlFormat = "select {0} from {1}";//定义基结构
Type type = typeof(T);//反射实体类
var pi = type.GetProperties();
string csStr = string.Join(",", pi.Select(o => o.Name));
sqlFormat = string.Format(sqlFormat, csStr, type.Name);
SqlConnection conn = new SqlConnection(SQLStr);
DataTable dt = new DataTable();
try
{
SqlDataAdapter dap = new SqlDataAdapter(sqlFormat, conn);//一次性加载数据库中所有属性,可以脱离链接进行操作,返回一个dataset对象
dap.Fill(dt);
List<T> list = new List<T>();
; i < dt.Rows.Count; i++)
{
T t = new T();
foreach (var pro in pi)
{
if (dt.Columns.Contains(pro.Name))
{
if (!(dt.Rows[i][pro.Name] is DBNull))//判断是否为空
{
pro.SetValue(t, dt.Rows[i][pro.Name]);
}
}
}
list.Add(t);
}
return list;
}
catch (Exception ex)
{
throw ex ;
}
}
#endregion
#region 条件查询
/// <summary>
/// 根据条件查询,也许有问题,讲师返回的是泛型T,而我经过改进返回的数值类型是datatable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <returns></returns>
public List<OrmsTable> GetModel<T>(OrmsTable model) where T : class, new()
{
string whereStr = "";
string sqlStr = "select {0} from {1} where 1=1 {2}";
Type typeT = typeof(T);
PropertyInfo[] pi = typeT.GetProperties();
string[] pNames = pi.Select(o => o.Name).ToArray();
string fieldStr = string.Join(",", pNames);//ID,name,chinese,enume"
pNames = pi.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) != null).Select(o => o.Name).ToArray();
)
{
whereStr = ],model.Zhuangtai);//例如:and id=1;
}
sqlStr = string.Format(sqlStr, fieldStr, typeT.Name, whereStr);//select ID,name,chinese,enume from Class1 where 1=1 and ID = 1
var dt =CurrentDbConn.Query<OrmsTable>(sqlStr)?.ToList();
return dt;
}
#endregion
#region 添加数据
/// <summary>
/// 添加数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <returns></returns>
//public static int Insert<T>(T model)
//{
// string sqlStr = "insert into {0}({1}) values({2})";
// string tbNameStr = string.Empty;
// string feildNameStr = string.Empty;
// string valStr = string.Empty;
// Type typeT = typeof(T);
// tbNameStr = typeT.Name;
// PropertyInfo[] pis = typeT.GetProperties();
// feildNameStr = string.Join(",", pis.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) == null).Select(o => o.Name));
// valStr = string.Join(",", pis.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) == null).Select(o => "@" + o.Name));
// sqlStr = string.Format(sqlStr, tbNameStr, feildNameStr, valStr);
// List<SqlParameter> pList = new List<SqlParameter>();
// foreach (PropertyInfo p in pis)
// {
// object obj = p.GetValue(model);
// string pName = "@" + p.Name;
// SqlParameter sp = new SqlParameter(pName, obj);
// pList.Add(sp);
// }
// return DBHelper.ExecuteNonQuery(sqlStr, pList.ToArray());
//}
public int Insert<T>(T Param) where T : class, new()
{
var t = typeof(T);
string sql = "insert into " + t.Name + " values('";
foreach (var item in t.GetProperties())
{
if(item.PropertyType.Name!="Int32")
{
sql += item.GetValue(Param) + "','";
}
else
{
sql += item.GetValue(Param) + ",";
}
}
,(sql.Length)-);
st += "')";
return CurrentDbConn.Execute(st);
}
#endregion
#region 删除
public int Delete<T>(T model)
{
string sqlStr = "delete from {0} where 1=1 {1}";
string strWhere = "";
Type typeT = typeof(T);
string tbName = typeT.Name;//声明一个变量用来存贮表的名字
var pi = typeT.GetProperties();
var pKey = pi.Where(p => p.GetCustomAttribute(typeof(KeyAttribute), false) != null);
List<SqlParameter> pList = new List<SqlParameter>();
)
{
PropertyInfo pK = pKey.First();
strWhere = string.Format(" and {0} = @{0}", pK.Name);
pList.Add(new SqlParameter("@" + pK.Name, pK.GetValue(model)));
}
sqlStr = string.Format(sqlStr, tbName, strWhere);
return CurrentDbConn.Execute(sqlStr, pList.ToArray());
}
#endregion
public bool Upt<T>(T t) where T : class, new()
{
bool ret = false;
try
{
string str = "";
string str1 = "";
string sql = "update {0} set {1} where {2}";
Type tp = typeof(T);
foreach (var i in tp.GetProperties())
{
var ty = i.PropertyType;
var tu = i.GetCustomAttributes(false);
)
{
str1 += " " + i.Name + "='" + i.GetValue(t) + "'";
}
else
{
switch (ty.Name)
{
case "Int32":
str += " " + i.Name + " ='" + i.GetValue(t) + "' ,";
break;
case "String":
str += " " + i.Name + " ='" + i.GetValue(t).ToString() + "' ,";
break;
}
}
}
str = str.Substring(, str.Length - );
sql = string.Format(sql, tp.Name, str, str1);
using (SqlConnection conn = new SqlConnection(SQLStr))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
ret = true;
}
}
}
catch (Exception ex)
{
ret = false;
}
return ret;
}
}
}
dapper的连接
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DAL
{
public class ConfigurationBaseDal: ParDal
{
private string _systemCenterStr = System.Configuration.ConfigurationManager.ConnectionStrings["DbConter"].ConnectionString;
//这是一个锁为了防止并发的发生
private object obj = new object();
private IDbConnection _systemCenterDbConn;
//定义一个字段
//利用单例模式来执行连接数据库
public override IDbConnection CurrentDbConn
{
get
{
//判断是否与数据库连接
if (_systemCenterDbConn == null)
{
lock (obj)
{
if (_systemCenterDbConn == null)
{
_systemCenterDbConn = new SqlConnection(_systemCenterStr);
}
}
}
return _systemCenterDbConn;
}
}
}
}
ORM的增删查的更多相关文章
- [开源]无sql之旅-Chloe.ORM之增删查改
扯淡 这是一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接查询.分组查询. ...
- 4.在MVC中使用仓储模式进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...
- SSH框架的多表查询和增删查改 (方法一)中
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html 这边文章是接的刚刚前一遍的基础上敲的 ...
- SSH框架的多表查询(方法二)增删查改
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
- SSH2 增删查改实例
(一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...
- mybatis、spring、mysql、maven实现简单增删查改
之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- 3.EF 6.0 Code-First实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
随机推荐
- JS DOM事件学习
DOM查找方法: document.getElementByID("id") document.getElementsByTagName("tag") 返回一个 ...
- 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...
- sql_update
学习: http://www.runoob.com/mysql/mysql-tutorial.html replace: update table_name set column = replace ...
- 在win10环境下搭建 solr 开发环境
在win10环境下搭建 solr 开发环境 2017年05月30日 09:19:32 SegaChen0130 阅读数:1050 在win10环境下搭建 solr 开发环境 安装环境 Windo ...
- 1、了解计算机与操作系统发展阶段 2、选择一个具体的操作系统,结合计算机与操作系统的发展阶段,详细了解其渊源、发展过程、趋势,整理成简洁美观的图文博客发布。 Windows Mac os x Unix Linux Android 等。
1.了解计算机与操作系统发展阶段 操作系统并不是与计算机硬件一起诞生的,它是在人们使用计算机的过程中,为了满足两大需求:提高资源利用率.增强计算机系统性能,伴随着计算机技术本身及其应用的日益发展,而逐 ...
- [python] bluepy 一款python封装的BLE利器
1.bluepy 简介 bluepy 是github上一个很好的蓝牙开源项目,其地址在 LINK-1, 其主要功能是用python实现linux上BLE的接口. This is a project t ...
- 浅谈Java的主要学习要点_上海尚学堂java培训课程思维导图
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网,同时拥 ...
- 查看和修改Linux服务器的时区和时间
一.查看和修改Linux的时区1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区方法 A 命令 : "tzselect" 方法 ...
- [Swift]LeetCode80. 删除排序数组中的重复项 II | Remove Duplicates from Sorted Array II
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...
- iFace安全专家揭秘:存放在区块链钱包中的比特币,其实已经早就不属于你……
自MoreToken钱包跑路之后,2019年3月以来陆续多个钱包.交易所跑路,造成了大量用户账户被盗,仅MoreToken钱包用户损失总价值就达12.2亿人民币,用户损失惨重.为什么这么多钱包.交易所 ...