正文
由于该工具近来被广东省数个公司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
声明:ienumerablesqlexecute (string cmdtext, params idataparameter[] params) where t : class, new()
用途:执行sql语句(select类)
参数:(1)string cmdtext -- sql语句
(2)params idataparameter[] params -- 参数组
返回:ienumerable-- 多数据结果集
sqlexecute
声明:ienumerablesqlexecute (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
声明:ienumerablespexecute (string cmdtext, params idataparameter[] params) where t : class, new()
用途:执行sp存储过程(select类)
参数:(1)string cmdtext -- sp存储过程名
(2)params idataparameter[] params -- 参数组
返回:ienumerable-- 多数据结果集
spexecute
声明:ienumerablespexecute (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存储过程工具的资料请关注其它相关文章!