gpt4 book ai didi

.Net执行SQL/存储过程之易用轻量工具

转载 作者:我是一只小鸟 更新时间:2022-12-20 14:32:45 30 4
gpt4 key购买 nike

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

  。

由于该工具近来被广东省数个公司2B项目采用,且表现稳定,得到良好验证,故在此推荐出来.

此工具在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
                          
                           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实体类代码如下形式:

                          
                            public
                          
                          
                            class
                          
                          
                             stu
{
        
                          
                          
                            public
                          
                          
                            int
                          
                           Id { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }
        
                          
                          
                            public
                          
                          
                            string
                          
                           Name { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }
        
                          
                          
                            public
                          
                          
                            int
                          
                           Age { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }
}

                          
                          
                            //
                          
                          
                            此实体类中的Id、Name、Age属性名,要与数据表中的Id、Name、Age字段名对应
                          
                        

注意:(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个示例,就能满足几乎所有的数据操作需求,且操作十分简易.

  。

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

SqlExecute
声明:
                          
                          
                            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>
                          
                            
声明: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>
                          
                            
声明: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
声明:
                          
                          
                            int
                          
                           SpExecute(
                          
                            string
                          
                           cmdText, 
                          
                            params
                          
                          
                             IDataParameter[] Params)
用途:执行Sp存储过程(Insert
                          
                          /Update/
                          
                            Delete类)
参数:(
                          
                          
                            1
                          
                            string
                          
                            cmdText              --
                          
                              Sp存储过程名
     (
                          
                          
                            2
                          
                            params
                          
                           IDataParameter[] Params --
                          
                              参数组
返回:
                          
                          
                            int
                          
                           --
                          
                              受影响的行数

SpExecute
声明:
                          
                          
                            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
                          
                           --  受影响的行数
                        

 原文链接: http://www.developersharp.cc/content13.html 。

  。

【附注】:文中所有示例均已成功运行通过!技术交流/支持+更多精彩干货,请立刻关注下方公众号! 。

  。

  。

最后此篇关于.Net执行SQL/存储过程之易用轻量工具的文章就讲到这里了,如果你想了解更多关于.Net执行SQL/存储过程之易用轻量工具的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com