MProc介绍

MProc:是一个用于执行SQL或存储过程的数据库操作类,它轻量高性能地类似于Dapper。

MProc:它出现的场景很少,因为MAction自身就能处理掉90%-100%的数据操作(以存储过程为核心操作的除外)

MProc项目Demo

1:项目图:只有一个控制台代码,说明此类的使用极度简单。

2:示例代码:

   class Program
{ static void Main(string[] args)
{
//MAction已经演示了配置文件配置链接,这里就用代码了。
AppConfig.DB.DefaultConn = "Data Source={0}demo.db;failifmissing=false;";
ExeSql();
ExeProc();
Console.Read();
}
static void OutMsg(object msg)
{
Console.WriteLine(msg.ToString());
}
/// <summary>
/// 执行SQL语句
/// </summary>
static void ExeSql()
{
//AppConfig.DB.DefaultConn = "server=CYQ-PC\\SQL2008;database=Test;uid=sa;pwd=123456";
string sql = "select * from users";
using (MProc proc = new MProc(sql))
{
proc.BeginTransation();//事务的使用和MAction是一样的 MDataTable dt = proc.ExeMDataTable();
OutMsg(dt.Rows.Count); proc.ResetProc("select name from users where UserID=@UserID");
proc.Set("UserID", );
string name = proc.ExeScalar<string>();
OutMsg(name); proc.ResetProc("update users set password=123 where name=@name");
proc.Set("name", name);
int result = proc.ExeNonQuery();
OutMsg(result); if (result < )
{
proc.RollBack();//找不到结果,要回滚事务
return;
} proc.ResetProc("select * from users;select * from Article");//多语句执行
List<MDataTable> dtList = proc.ExeMDataTableList();
OutMsg(dtList.Count);
proc.EndTransation();
}
}
/// <summary>
/// 执行存储过程
/// </summary>
static void ExeProc()
{
return;
//SQlite 没有存储过程,只能写示例代码
using (MProc proc = new MProc("存储过程名"))
{
proc.Set("参数1", "值1");
proc.Set("参数2", "值2");
proc.SetCustom("ReturnValue", ParaType.ReturnValue);//如果有返回值
proc.SetCustom("OutPutValue1", ParaType.OutPut);//如果有output值
proc.SetCustom("OutPutValue2", ParaType.OutPut);//如果有output值多个
proc.SetCustom("XXX", ParaType.Cursor);//如果是Oracle有游标
proc.SetCustom("XXX2", ParaType.CLOB);//Oracle的CLOB类型
proc.SetCustom("XXX3", ParaType.NCLOB);//Oracle的NCLOB类型
MDataTable dt = proc.ExeMDataTable();//执行语句
int returnValue = proc.ReturnValue;//拿返回值
object outPutValue = proc.OutPutValue;//如果只有一个值
Dictionary<string,string> dic=proc.OutPutValue as Dictionary<string,string>;
string out1 = dic["OutPutValue1"];
string out2 = dic["OutPutValue2"];
}
}
}

3:代码说明:

1:MProc的参数判断是存储过程还是SQL语句是按空格判断的。

2:如果你的SQL语句是select%20*%20from...将空格转义,会被判断为存储过程的。

3:如果你真要这么整,第三个参数isFixProc可以设置为false或true来指定是SQL或存储过程。

4:存储过程时:特殊的参数在SetCustom里设置。

5:返回值、OutPut值,都是在执行后才拿值的。(以前有人在执行前就拿值,弄的我不知道怎么解释)

总结:

1:Demo的SVN下载地址:http://code.taobao.org/svn/cyqopen/trunk/CYQ.Data.GettingStarted/

2:谢谢支持!

CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用的更多相关文章

  1. CYQ.Data V5 从入门到放弃ORM系列:框架的优势

    前言: 框架开源后,学习使用的人越来越多了,所以我也更加积极的用代码回应了. 在框架完成了:数据库读写分离功能 和 分布式缓存功能 后: 经过三天三夜的不眠不休,终于完成框架第三个重量级的功能:自动化 ...

  2. CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用

    Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...

  3. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用

    背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...

  4. CYQ.Data V5 从入门到放弃ORM系列:教程 - AppConfig、AppDebug类的使用

    1:AppConfig类的介绍: Public Static (Shared) Properties IsEnumToInt 是否使用表字段枚举转Int方式(默认为false). 设置为true时,可 ...

  5. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  7. 终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  8. CYQ.Data V5 分布式自动化缓存设计介绍(二)

    前言: 最近一段时间,开始了<IT连>创业,所以精力和写的文章多数是在分享创业的过程. 而关于本人三大框架CYQ.Data.Aries.Taurus.MVC的相关文章,基本都很少写了. 但 ...

  9. CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

    前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...

随机推荐

  1. Winserver下的Hyper-v “未在远程桌面会话中捕获到鼠标”

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  2. Paypal开发中遇到请求被中止: 未能创建 SSL/TLS 安全通道及解决方案

    最近在基于ASP.NET上开发了Paypal支付平台,在ASP.NET开发的过程中没有遇到这个问题,但是引用到MVC开发模式中的时候就出现了"未能创建 SSL/TLS 安全通道及解决方案&q ...

  3. 数塔问题(DP算法)自底向上计算最大值

    Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数 ...

  4. NPM如何更新到最新版

    参考文章--npm更新到最新版本的方法 其实我们可以这样,随便新建一个文件夹例如:F:\test.按着"shift"键,右键该文件夹,选择"在此处打开命令窗口(W)&qu ...

  5. Block解析(iOS)

    1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...

  6. 基于SOA架构的TDD测试驱动开发模式

    以需求用例为基,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段.研发准备 ...

  7. TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint

    前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...

  8. 【一起学OpenFOAM】03 OpenFOAM基本使用流程

    OpenFOAM初学者常常对于软件的使用流程感到很迷惑,与其他的具有GUI的CFD软件不同,OpenFOAM的所有操作均为基于文本操作,譬如说里面各种计算模型.计算参数.流程控制参数等,均为通过修改对 ...

  9. CentOS 6.5安装Node.js, npm

    CentOS上可以通过下载*.tar.gz安装包的方式自己解压缩.编译的方式安装,同时还可以采用EPEL的方式安装: Node.js and npm are available from the Fe ...

  10. 开始mono开发

    使用mono框架开发android程序,第一步当然是构建开发环境,严格意义上说是使用 mono for android开发android程序. 参考Mono for Android安装配置破解  mo ...