.net执行sql存储过程之易用轻量工具详解-kb88凯时官网登录

来自:网络
时间:2024-06-10
阅读:

正文

由于该工具近来被广东省数个公司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("select * from t_student");
   //查询多数据(带参数)
   var students2 = ida.sqlexecute("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("select * from t_student where id>@idmin and name like @likename", likename, idmin);
   //另一种写法2
   var students4 = ida.sqlexecute("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
声明:ienumerable sqlexecute(string cmdtext, params idataparameter[] params) where t : class, new()
用途:执行sql语句(select类)
参数:(1)string  cmdtext              --  sql语句
     (2)params idataparameter[] params --  参数组
返回:ienumerable --  多数据结果集
sqlexecute
声明:ienumerable sqlexecute(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 --  多数据结果集
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
声明:ienumerable spexecute(string cmdtext, params idataparameter[] params) where t : class, new()
用途:执行sp存储过程(select类)
参数:(1)string  cmdtext              --  sp存储过程名
     (2)params idataparameter[] params --  参数组
返回:ienumerable --  多数据结果集
spexecute
声明:ienumerable spexecute(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 --  多数据结果集
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 --  受影响的行数

以上就是.net执行sql存储过程之易用轻量工具详解的详细内容,更多关于.net执行sql存储过程工具的资料请关注其它相关文章!

返回顶部
顶部
网站地图