支持.Net Core(2.0及以上)与.Net Framework(4.0及以上)(注意:升级了,可以覆盖到早期的.Net Framework4.0了,而且修复了数据库字段为Null时报错的问题,无敌了!!)

此工具在IDataAccess接口中提供。 已被.Net圈内多家大厂采用!

IDataAccess所在的命名空间是:DeveloperSharp.Framework.QueryEngine(需从NuGet引用DeveloperSharp最新包)

它主要提供了如下四大功能:

(1)     执行Sql语句

(2)     执行Sp存储过程

(3)     创建参数(输入/输出/返回)

(4)     事务

它初始化的代码如下:

若是在.Net Core环境下,代码如下:

using DeveloperSharp.Framework.QueryEngine;
-------------------------- //在Startup.cs或Program.cs文件中进行
Services.AddTransient<IDataAccess>((t) => {
DatabaseInfo DIF;
DIF.DatabaseType = DatabaseType.SQLServer; //设置数据库类型
DIF.ConnectionString = "Server=localhost;Database=YZZ;Uid=sa;Pwd=123";
return DataAccessFactory.Create(DIF);
});

若是在.Net Framework环境下,代码如下:

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);

注意:通过对DatabaseType属性的设定,提供了对所有种类数据库的支持(包括:MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Access、ODBC等)

【示例1:查询】

下面,首先直接给出一个“查询多数据+选出单数据+参数”的使用示例,代码如下:

   //查询多数据
var Students1 = IDA.SqlExecute<stu>("select * from t_Student"); //查询多数据(带参数)
var Students2 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", new { IdMin = 2, LikeName = "%周%" });
//另一种写法1
var IdMin = IDA.CreateParameterInput("IdMin", DbType.Int32, 2);
var LikeName = IDA.CreateParameterInput("LikeName", DbType.String, 50, "%周%");
var Students3 = IDA.SqlExecute<stu>("select * from t_Student where Id>@IdMin and Name like @LikeName", LikeName, IdMin);
//另一种写法2
var Students4 = IDA.SqlExecute<stu>("select * from t_Student").Where(t => t.Id > 2 && t.Name.Contains("周")); //选出单数据
var OneStudent = Students2.FirstOrDefault();

其中stu实体类代码如下形式:

    //此实体类中的Id、Name、Age、Birth、MyLevel属性名,要与数据表中的字段名一一对应
public class stu
{
public int? Id { get; set; }//数据库中该字段若存在Null值,类型后需要加问号?
public string Name { get; set; }
public int? Age { get; set; }
public DateTime? Birth { get; set; }
public Level? MyLevel { get; set; }//也可以使用枚举,会自动转换
} public enum Level
{
Student=100,//学生
Teacher=200,//老师
Manager=300,//管理员
Principle=400//校长
}

注意:(1)DbType类型的命名空间是System.Data

(2)若没有定义stu实体类,也可以用dynamic替代

【示例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);

分页后获得的PagePiece对象中所包含的各类属性/参数,可参看这篇文章:高效分页

【示例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"); //修改数据(带参数)
int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@N,@A)", new { N = "孙悟空", A = 200 });
//另一种写法
var NewAge = IDA.CreateParameterInput("NewAge", DbType.Int32, 200);
var NewName = IDA.CreateParameterInput("NewName", DbType.String, 50, "孙悟空");
int affectedRows3 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@NewName,@NewAge)", NewName, NewAge); //完成事务
IDA.TransactionCommit();
}
catch
{
//回滚事务
IDA.TransactionRollBack();
}

【示例4:输出参数】

前面几个示例都只用到了“输入参数”,下面我们看看“输出参数”怎么使用,示例代码如下:

   var op1 = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//此项为输出参数
var op2 = IDA.CreateParameterOutput("MyName", DbType.String, 50);//此项为输出参数 //以下sql语句混杂了多个“输入”与“输出”参数,注意看
IDA.SqlExecute("insert into Friend(Birth,Name,height)values(@B,@N,@h);" +
"select @TotalCount=count(*) from Friend;" +
"select @MyName=Name from Friend where Id=@Id",
new { N = "杨小伟", B = "1999-02-28 12:03:45", h = 11.023, Id = 2 },
op1, op2); int tc = Convert.ToInt32(op1.Value);
string mn = op2.Value.ToString();

【示例5:存储过程】

最后,我们来谈谈如何调用存储过程。我们创建一个存储过程,它带有输入、输出、返回三种类型的参数,代码如下:

CREATE PROCEDURE Test5
@B as datetime,
@N as nvarchar(50),
@h as float,
@TotalCount as int output,
@MyName as nvarchar(50) output,
@Id as int
AS
BEGIN
insert into Friend(Birth,Name,height)values(@B,@N,@h);
select @TotalCount=count(*) from Friend;
select @MyName=Name from Friend where Id=@Id;
return @TotalCount+100;
END

调用该存储过程的示例代码如下:

   var op1 = IDA.CreateParameterOutput("TotalCount", DbType.Int32);//输出参数
var op2 = IDA.CreateParameterOutput("MyName", DbType.String, 50);//输出参数
var op3 = IDA.CreateParameterReturn();//返回参数 IDA.SpExecute("Test5", new { N = "杨小伟", B = "1999-02-28 12:03:45", h = 11.023, Id = 2 }, op1, op2, op3); int tc = Convert.ToInt32(op1.Value);
string mn = op2.Value.ToString();
int ret = Convert.ToInt32(op3.Value);

学习+灵活使用以上5个示例,就能满足几乎所有的数据操作需求,且操作十分简便。

运行有问题,需要技术支持?以及bug提交通道,请添加微信:894988403

运行有问题,需要技术支持?以及bug提交通道,请添加微信:894988403

[注]:以上所有示例均用的同步方法,也有异步方法(比如:SqlExecuteAsync<T>、之类)可自行使用。但若在早期.Net Framework4.0版本下使用异步,需要添加using System.Threading.Tasks。

IDataAccess内功能方法详细说明(辅助参考):

SqlExecute<T>  (异步为:SqlExecuteAsync<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<T> (异步为:SqlExecuteAsync<T>)
声明:IEnumerable<T> SqlExecute<T>(string cmdText, object InputParams, params IDataParameter[] Params) where T : class, new()
用途:执行Sql语句(Select类)
参数:(1)string cmdText -- Sql语句
(2)object InputParams -- 输入参数对象
(3)params IDataParameter[] Params -- 参数组
返回:IEnumerable<T> -- 多数据结果集 SqlExecute (异步为:SqlExecuteAsync)
声明:int SqlExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sql语句(Insert/Update/Delete类)
参数:(1)string cmdText -- Sql语句
(2)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数 SqlExecute (异步为:SqlExecuteAsync)
声明:int SqlExecute(string cmdText, object InputParams, params IDataParameter[] Params)
用途:执行Sql语句(Insert/Update/Delete类)
参数:(1)string cmdText -- Sql语句
(2)object InputParams -- 输入参数对象
(3)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数 SpExecute<T> (异步为:SpExecuteAsync<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<T> (异步为:SpExecuteAsync<T>)
声明:IEnumerable<T> SpExecute<T>(string cmdText, object InputParams, params IDataParameter[] Params) where T : class, new()
用途:执行Sp存储过程(Select类)
参数:(1)string cmdText -- Sp存储过程名
(2)object InputParams -- 输入参数对象
(3)params IDataParameter[] Params -- 参数组
返回:IEnumerable<T> -- 多数据结果集 SpExecute (异步为:SpExecuteAsync)
声明:int SpExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sp存储过程(Insert/Update/Delete类)
参数:(1)string cmdText -- Sp存储过程名
(2)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数 SpExecute (异步为:SpExecuteAsync)
声明:int SpExecute(string cmdText, object InputParams, params IDataParameter[] Params)
用途:执行Sp存储过程(Insert/Update/Delete类)
参数:(1)string cmdText -- Sp存储过程名
(2)object InputParams -- 输入参数对象
(3)params IDataParameter[] Params -- 参数组
返回:int -- 受影响的行数


下面是我的公众号,里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助力个人快速成长。

你也可以加入我们(添加微信:894988403,备注“进群”),向大佬学习,探行业内幕,享时代机遇。

执行SQL语句&存储过程的真正【神器】,不用ORM的全选它,比dapper好的更多相关文章

  1. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  2. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  3. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  4. 如何用VS EF连接 Mysql,以及执行SQL语句 和存储过程?

    VS2013, MySQL5.7.18 , MySQL5.7.14 执行SQL语句: ztp_user z = new ztp_user(); object[] obj = new object[] ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

    这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的SQL语句? 返回值过于复杂 过于复杂的联合查 ...

  6. 使用C# 操作存储过程,执行sql语句通用类

    如何使用C# 操作存储过程,执行sql语句? 闲话不多说,直接上代码:     /// <summary>    /// Sql通用类    /// </summary>    ...

  7. 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷

    通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下:     步骤1:通过MyEclipse中的window->show View->ot ...

  8. EF Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  9. 动态执行SQL语句,接收返回值

    一.exec和sp_executesql介绍 当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句.比如,一个比较通用的分页存储过程,可能需要传入表名,字段,过滤条件, ...

  10. 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

    在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...

随机推荐

  1. 从隐私保护到AI隐私保护:隐私隐私保护的跨隐私保护治理框架实践案例

    目录 标题:<从隐私保护到AI隐私保护:跨隐私保护治理框架实践案例> 背景介绍 随着人工智能技术的广泛应用,隐私保护问题也日益突出.数据隐私泄露.算法歧视等问题引发了公众的担忧和不满.为了 ...

  2. Taurus .Net Core 微服务开源框架:Admin 插件【3】 - 指标统计管理

    前言: 继上篇:Taurus .Net Core 微服务开源框架:Admin 插件[2] - 系统环境信息管理 本篇继续介绍下一个内容: 1.系统指标节点:Metric - API 界面 界面图如下: ...

  3. 服务器端Ajax异步分页类,基本通用分页类

    public static class PagerHelper { #region 数字分页类 /// <summary> /// /// </summary> /// < ...

  4. Auto.Core

    Auto Core (基于AspectCore) 介绍 AutoCore是基于 .Net Standard 2.1用于简化 ASP.NET Core开发,AutoCore 在 AspectCore 的 ...

  5. 机试练习(一)——Codeforces 784B Santa Claus and Keyboard Check

    最近在准备机试,对练习的机试题做个总结.之前没有学过C++,只学过C语言,但是实际用起来的时候发现C++是更适合机试的语言,因为它的库函数更多,能支持更多操作,将一些代码简化. 习惯了C语言定义字符串 ...

  6. ChatGPT的探索与实践-业务应用篇

    本篇文章主要介绍在实际的开发过程当中,如何使用GPT帮助开发,优化流程,恰逢今年京东20周年庆,文末会介绍如何与618大促实际的业务相结合,来提升应用价值.全是干货,且本文所有代码和脚本都是利用GPT ...

  7. sql中当关联查询主表很大影响查询速度时怎么办?

    sql中当关联查询主表很大时,直接关联,查询速度会较慢,这时可以先利用子查询经筛选条件筛除一部数据,这样主连接表体量减少,这样能一定程度加快速度. (1)常规join -- 最慢7.558s sele ...

  8. 使用npm下载vue

    一.安装npm 1. 安装node.js npm(Node Package Manager): node.js下的包管理器 前往node.js官网下载并安装工具,nodejs安装完毕后自动会安装npm ...

  9. Java stream流使用

    1.使用filter()过滤List //查找身高在1.8米及以上的学生 List<StudentInfo> boys = studentList.stream().filter(s-&g ...

  10. 初识C语言中的typedef、define以及Status

    小阿杰最近开始看数据结构啦嘿嘿嘿, 可惜小阿杰C语言功底稀薄,以此篇随笔记录一下我卑微的学习之路/苦涩/苦涩 首先define没啥好说的,在文件开头,定义一个固定不变的值. #define MAXN ...