VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • .NET中大型项目开发必备(13)--DataAccess数据库访问技术(续)

前言:本系列文章适合有初/中级.NET知识的同学阅读(请在电脑上打开页面,获取更好的阅读效果)。
(1)本系列文章,旨在讲述研发一个中大型项目所需要了解的一系列“基本构件”,并提供这些“基本构件”在全网的【最简单】、【最快速】使用方法!!(并不深究技术原理)
(2)通过阅读本系列文章,能让你在正规“项目研发”方面快速入门+进阶,并能达成“小团队构建大网站”的目的。
(3)本系列文章采用的技术,已成功应用到人工智能、产业互联网、社区电商、游戏、金融风控、智慧医疗、等项目上。

工具下载:

nuget搜索关键字:DeveloperSharp

 

支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac。

本文要介绍的主角-DeveloperSharp框架中的DataAccess数据库访问技术(续),提供了一种结合“原生Sql+轻量级ORM”操作各类数据库的工具。

该工具几乎只使用了一个方法/函数,却实现了几乎所有的数据操作功能。它已成功应用到了人工智能、产业互联网、智慧医疗、等多个大型项目上。

 

此工具在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);
复制代码

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

 

【示例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);
复制代码

分页后获得的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");

       //修改数据(带参数)
       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>

-----------------------

【后记】

        有读者问到:本“工具说明”文章过于简单,缺乏全面、细节功能的详细介绍,所以很难依据本文内容做全面学习及后续开发。

        回答如下:其实不然,原因有三。

                          (1)有一定数据库开发经验的人应该能看出,本文介绍的内容,已经能满足绝大多数情况下数据库操作的功能需求。

                          (2)不像其它第三方工具有很多非标的自定义语法(这些“自定义语法”需要单独学习,而且往往并不符合微软规范),本工具顺应了原生.Net/C#、Linq、Sql语言的协调性(从几个示例就能看出),所以无需付出更多学习时间,自己动手简单用一用,各种功能就能马上实现。

                            举例:本文示例中并没有给出对结果集进行“排序操作”的代码。但你若会用Linq,顺应的应该马上能猜出如何进行排序?

                          (3)已有读者依据本文内容把技术采用到了具体项目上。

----------------------- 

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

复制代码
SqlExecute<T>
声明:IEnumerable<T> SqlExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:执行Sql语句(Select类)
参数:(1string  cmdText              --  Sql语句
     (2params IDataParameter[] Params --  参数组
返回:IEnumerable<T> --  多数据结果集


SqlExecute
声明:int SqlExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sql语句(Insert/Update/Delete类)
参数:(1string  cmdText              --  Sql语句
     (2params IDataParameter[] Params --  参数组
返回:int --  受影响的行数

SpExecute<T>
声明:IEnumerable<T> SpExecute<T>(string cmdText, params IDataParameter[] Params) where T : class, new()
用途:执行Sp存储过程(Select类)
参数:(1string  cmdText              --  Sp存储过程名
     (2params IDataParameter[] Params --  参数组
返回:IEnumerable<T> --  多数据结果集

SpExecute
声明:int SpExecute(string cmdText, params IDataParameter[] Params)
用途:执行Sp存储过程(Insert/Update/Delete类)
参数:(1string  cmdText              --  Sp存储过程名
     (2params IDataParameter[] Params --  参数组
返回:int --  受影响的行数
复制代码

 

 



相关教程