【朝夕教育】2023年10月 .NET CORE工具案例-DeveloperSharp(数据库访问技术)

本文介绍数据库访问技术,如SQL、JDBC等。重点讲解DeveloperSharp的使用,它是中大型项目必备的低代码平台,支持多种数据库,具备数据库操作、图片操作等功能。还给出安装包、初始化连接方法,以及查询、分页、增删改等操作的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,优快云博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年优快云博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏


🚀前言

数据库访问技术是指访问和操作数据库的方法和技术。数据库访问技术主要有以下几种:

  1. SQL:SQL(Structured Query Language)是一种专门用于管理关系型数据库的语言,它可以用来进行数据的增删改查,以及对数据库表、视图等进行创建、修改和删除等操作。

  2. JDBC:JDBC(Java Database Connectivity)是一种用于在Java应用程序中访问数据库的API。它提供了一系列的接口和类,可以通过Java代码连接和操作各种数据库。

  3. ORM:ORM(Object-Relational Mapping)是一种将对象和关系数据库映射起来的技术,它可以使得开发人员使用面向对象的方式来访问和操作数据库,而无需手写SQL语句。

  4. NoSQL:NoSQL(Not Only SQL)是一类非关系型数据库,它可以存储非结构化和半结构化的数据,如文档、键值对、图形等。NoSQL数据库通常具有高可扩展性、高性能和高可用性等特点。

  5. ODBC:ODBC(Open Database Connectivity)是一种面向程序开发人员的数据库访问技术,可以使得不同操作系统和编程语言下的应用程序能够访问和操作各种数据库。

本文主要介绍DeveloperSharp的使用,DeveloperSharp是一个研发中大型项目必备的系统平台,也是一个低代码平台。

它主要包括了如下一些功能:

  • 基于Sql语句、存储过程、事务、分页的数据库操作。并几乎支持市面上所有种类的数据库。
  • 图片操作。裁剪、缩放、加水印。
  • http请求调用(Post与Get)
  • 高效分页
  • Web服务/WebApi的负载均衡
  • 数据库的负载均衡,以及读写分离
  • CORS跨域访问
  • UUID全球通用唯一识别码
  • MQ消息队列(请另行使用DeveloperSharp.RabbitMQ包)
  • Redis缓存(请另行使用DeveloperSharp.Redis包)
  • “异种数据库”的负载均衡
  • 其他相关功能

🚀一、DeveloperSharp的使用

🔎1.安装包

DeveloperSharp

在这里插入图片描述

🔎2.初始化数据库连接

1、WEB项目

//在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);
});

2.控制台项目

using DeveloperSharp.Framework.QueryEngine;

DatabaseInfo DIF;

DIF.DatabaseType = DatabaseType.SQLServer; //设置数据库类型
DIF.ConnectionString = "Server=localhost;Database=PSIDBase;Uid=sa;Pwd=1";
IDataAccess IDA = DataAccessFactory.Create(DIF);

通过对DatabaseType属性的设定,提供了对所有种类数据库的支持(包括:MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Firebird、达梦、以及人大金仓KingbaseES、神舟通用, 南大通用, 翰高, Access、等)

在这里插入图片描述

🦋2.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//校长
}
🦋2.2 分页

若我们要对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);
🦋2.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();
}
🦋2.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();
🦋2.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);

🚀备注

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

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 --  受影响的行数

🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值