高效简单的.Net数据库“访问+操作”技术
本文技术源自外企,并已在多个世界500强大型项目开发中运用。
本文适合有初步C#、Linq、Sql知识的同学阅读。
相关技术在IDataAccess接口中提供。
IDataAccess所在的命名空间是:DeveloperSharp.Framework.QueryEngine。(需事先从nuget引用DeveloperSharp)
它主要提供了如下四大功能:
(1) 执行Sql语句
(2) 执行Sp存储过程
(3) 创建参数(输入/输出/返回)
(4) 事务
它初始化的代码如下:
using DeveloperSharp.Framework.QueryEngine;
-------------------------- DatabaseInfo DIF;
DIF.DatabaseType = DatabaseType.SQLServer; //设置数据库类型
DIF.ConnectionString = "Server=localhost;Database=YZZ;Uid=sa;Pwd=123";
IDataAccess IDA = DataAccessFactory.Create(DIF);
注意:(1)通过对DatabaseType属性的设定,提供了对各不同种类数据库的支持(包括:MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Firebird、达梦、以及人大金仓KingbaseES、神舟通用, 南大通用, 翰高, Access、等)
(2).NET6.0的版本支持以上所有数据库;.NET4.5的版本直接支持Oracle与Sql Server,其它则需要通过设定ODBC来支持。
【示例1:查询】
下面,首先直接给出一个“查询多数据+选出单数据+参数”的使用示例,代码如下:
//查询多数据
var Students1 = IDA.SqlExecute<stu>("select * from t_Student"); //查询多数据(带参数)
var IdMin = IDA.CreateParameterInput("IdMin", DbType.Int32, 2);
var LikeName = IDA.CreateParameterInput("LikeName", DbType.String, 50, "%周%");
var Students2 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", IdMin, LikeName);
//另一种写法
var Students3 = IDA.SqlExecute<stu>("select * from t_Student").Where(t => t.Id > 2 && t.Name.Contains("周")); //选出单数据
var OneStudent = Students2.FirstOrDefault();
其中stu实体类代码如下形式:
public class stu
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
//此实体类中的Id、Name、Age属性名,要与数据表中的Id、Name、Age字段名对应
注意:创建参数时使用DbType类型,就是为了能在不同类型数据库(SqlServer、MySql、Oracle、等)之间快速切换!
【示例2:分页】
承接上面“示例1”的代码,若我们要对Students1、Students2进行分页操作(比如:每页20条,取出第5页),相关代码如下:
using DeveloperSharp.Extension;//调用“分页功能”需要引用此命名空间
-------------------------- var Page1 = Students1.PagePartition(20, 5);
var Page2 = Students2.PagePartition(20, 5); //一气呵成的写法
var Page3 = IDA.SqlExecute<stu>("select * from t_Student").PagePartition(20, 5);
【示例3:增/删/改】
前面谈完“查询”,我们接下来谈谈“增/删/改”的使用方式,下面是一个“修改数据+参数+事务”的使用示例:
try
{
//开启事务
IDA.TransactionBegin(); //修改数据(多语句)
int affectedRows1 = IDA.SqlExecute("insert into t_Student(Name,Age)values('ww','96');update t_Student set Age=100 where Id=1006"); //修改数据(带参数)
var NewAge = IDA.CreateParameterInput("NewAge", DbType.Int32, 200);
var NewName = IDA.CreateParameterInput("NewName", DbType.String, 50, "孙悟空");
int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@NewName,@NewAge)", NewName, NewAge); //完成事务
IDA.TransactionCommit();
}
catch
{
//回滚事务
IDA.TransactionRollBack();
}
【示例4:其它】
最后,我们给出一个“聚合函数+输出参数”的使用示例,代码如下:
var IdMax = IDA.CreateParameterInput("IdMax", DbType.Int32, 20);
var TotalCount = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//此项为输出参数
var Students3 = IDA.SqlExecute<stu>("select @TotalCount=count(*) from t_Student where Id<@IdMax", TotalCount, IdMax);
int tc = (int)TotalCount.Value;
灵活学习+使用以上4个示例,就能满足几乎所有的数据操作需求。
另外,你有没有发现,上述所有的数据操作几乎只用了一个方法来实现:SqlExecute/ SqlExecute<T>
【附注】:文中所有示例均已成功运行通过!!技术交流/支持,请微信扫描二维码,备注“进群”!

IDataAccess内功能方法详细说明(辅助参考):
SqlExecute<T>
声明:IEnumerable<T> SqlExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:执行Sql语句(Select类)
参数:(1)string cmdText -- Sql语句
(2)params IDataParameter[] Params -- 参数组
返回:IEnumerable<T> -- 多数据结果集 SqlExecute
声明:int SqlExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sql语句(Insert/Update/Delete类)
参数:(1)string cmdText -- Sql语句
(2)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数 SpExecute<T>
声明:IEnumerable<T> SpExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:执行Sp存储过程(Select类)
参数:(1)string cmdText -- Sp存储过程名
(2)params IDataParameter[] Params -- 参数组
返回:IEnumerable<T> -- 多数据结果集 SpExecute
声明:int SpExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sp存储过程(Insert/Update/Delete类)
参数:(1)string cmdText -- Sp存储过程名
(2)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数
高效简单的.Net数据库“访问+操作”技术的更多相关文章
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- webform简单空间以及数据库访问
1.简单控件 Label - 文字,编译后显示的是<span> 一说到边框:1.颜色 2.类型,比如solid实线3.width宽度Literal -里面可以承载很多东西,比如文字,比如a ...
- JDBC数据库访问操作的动态监测 之 Log4JDBC
log4jdbc是一个JDBC驱动器,能够记录SQL日志和SQL执行时间等信息.log4jdbc使用SLF4J(Simple Logging Facade)作为日志系统. 特性: 1.支持JDBC3和 ...
- JDBC数据库访问操作的动态监测 之 p6spy
P6spy是一个JDBC Driver的包装工具,p6spy通过对JDBC Driver的封装以达到对SQL语句的监听和分析,以达到各种目的. P6spy1.3 sf.net http://sourc ...
- [转]DbHelper通用数据库访问帮助类
之前我一直都是在博客园中查看各位高手的博文,确实学到了不少知识,不过比较少写博客,现在就把我自己在项目实施过程中使用到比较好的技术框架写出来,希望能让更多的人了解和学习. 通常我们在开发使用数据库访问 ...
- 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
在我的各种开发框架中,数据访问有的基于微软企业库,有的基于EFCore的实体框架,两者各有其应用场景,不过多的去比较.最近在使用SqlSugar的时候,觉得这个数据访问处理的组件确实很灵活,据说性能也 ...
- JDBC增删改数据库的操作
JDBC入门及简单增删改数据库的操作 一.JDBC的引入 1.JDBC的概念 JDBC:Java Database Connection,表示数据库连接(任何数据库都支持JDBC的连接),是一个独立于 ...
- C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...
- C#与数据库访问技术总结(十八)
ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...
随机推荐
- TKE qGPU 通过 CRD 管理集群 GPU 卡资源
作者 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理经验,现负责腾讯云 GPU 容器的研发工作. 背景 目前 TKE 已提供基于 qGPU 的算力/显存强隔离 ...
- CMU 15-445 数据库课程第四课文字版 - 存储2
熟肉视频地址: CMU数据库管理系统课程[熟肉]4.数据库存储结构2(上) CMU数据库管理系统课程[熟肉]4.数据库存储结构2(下) 1. 面向日志的存储 上节课我们讲完了面向元组的存储,这节课从面 ...
- Mac 睡眠唤醒 不睡眠 问题
问题 之前一直有夜晚睡觉前电脑关机的习惯,主要是想着电脑也跟人一样️要休息.然后最近想着自己 Mac 干脆每天睡眠算了,省得每天开关机麻烦,所以就最近这段时间每次夜晚睡觉前主动去点了电脑的 「Slee ...
- 2021年第十二届蓝桥杯javaA组省赛部分题目
试题 D: 路径 本题总分:10 分 [问题描述] 小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径. 小蓝的图由 2021 个结点组成,依次编号 1 至 2021. 对 ...
- sklearn练习1 回归
from sklearn.svm import SVR from sklearn.pipeline import make_pipeline from sklearn.preprocessing im ...
- 快速 IO
IO 的进化史 cin和cout 刚开始学的时候,老师叫我们用 cin 和 cout 大概是因为这最简单吧 cin>>x; cout<<x scanf和printf 学到函数了 ...
- .NET6接入Skywalking链路追踪完整流程
一.Skywalking介绍 Skywalking是一款分布式链路追踪组件,什么是链路追踪? 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软 ...
- 【python基础】第11回 数据类型内置方法 02
本章内容概要 列表内置方法 字典内置方法 元组内置方法 集合内置方法 可变类型与不可变类型 本章内容详细 1.列表内置方法 list 列表在调用内置方法之后不会产生新的值 1.1 统计列表中的数据值的 ...
- ShardingSphere-proxy-5.0.0建立mysql读写分离的连接(六)
一.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or ...
- Docker 配置 Seata 集成 Nacos
1.拉取镜像 docker pull seataio/seata-server:1.4.2 docker run --name seata -p 8091:8091 -d seataio/seata- ...